2013-08-01 2 views
19

Во многих местах в моем приложении я использую следующий код для выполнения фоновых задач и уведомить основной поток:создать настраиваемый последовательную глобальную очередь отправки

dispatch_queue_t backgroundQueue = dispatch_queue_create("dispatch_queue_#1", 0); 
    dispatch_async(backgroundQueue, ^{ 

    dispatch_async(dispatch_get_main_queue(), ^{ 


     }); 
    }); 

Можно ли создать backgroundQueue в одном месте (где делает лучший способ?) и использовать его позже? Я знаю о глобальной глобальной системе, но для меня важно упорядочить.

ответ

34

Нечто подобное должно работать нормально:

dispatch_queue_t backgroundQueue() { 
    static dispatch_once_t queueCreationGuard; 
    static dispatch_queue_t queue; 
    dispatch_once(&queueCreationGuard, ^{ 
     queue = dispatch_queue_create("com.something.myapp.backgroundQueue", 0); 
    }); 
    return queue; 
} 
+0

Вы могли бы добавить пример его использования? – pvllnspk

+0

Уверен: dispatch_async (backgroundQueue(),^{NSLog (@ "Записан в фоновом режиме!"}); –

+0

не может скомпилировать ваш код в ответе – pvllnspk

0

Вы также можете нам NSOperationQueue и толкать операции к нему. Чтобы убедиться, что операции не исчерпаны, вы можете установить isConcurrent равным NO.

+0

это не мой случай – pvllnspk

-5
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
       //back ground thread 

       dispatch_async(dispatch_get_main_queue(), ^{ 
        // main thread 
         }); 
       }); 
0
queue = dispatch_queue_create("com.something.myapp.backgroundQueue", 0); 

Предшествующие является последовательной очередью, если вы хотите создать параллельную очередь, вы можете использовать DISPATCH_QUEUE_CONCURRENT.

В iOS 5 и более поздних версиях вы можете создавать параллельные очереди отправки самостоятельно, указав DISPATCH_QUEUE_CONCURRENT в качестве типа очереди.

dispatch_queue_t queue = dispatch_queue_create("downLoadAGroupPhoto", 
                DISPATCH_QUEUE_CONCURRENT); 
Смежные вопросы