UIKit классы должны использоваться только из основного потока приложения. (Начиная с iOS4, рисование в графическом контексте является поточно-ориентированным.) Вы не можете использовать UIKit в фоновом потоке.
Таким образом, вы можете использовать dispatch_async (dispatch_get_main_queue (), block) только в этой ситуации.
dispatch_async(dispatch_get_main_queue(), ^(void) {
Он вызовет блок в главном потоке в цикле выполнения основного потока.
dispatch_async(dispatch_queue_create("myGCDqueue", NULL), ^(void) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
Это вызовет блок в фоновом потоке. Вы не можете использовать его, потому что вы хотите использовать UIKit в блоке. И будьте осторожны dispatch_async (dispatch_queue_create (, это может вызвать утечку памяти, вам нужно освободить последовательную очередь, созданную dispatch_queue_create.
dispatch_sync(dispatch_queue_create("myGCDqueue", NULL), ^(void) {
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
dispatch_sync ждет, пока блок не будет завершен.
dispatch_sync(dispatch_get_main_queue(), ^(void) {
Это вызывает DEADLOCK.