Создать пользовательскую последовательную глобальную диспетчерскую очередь
Во многих местах моего приложения я использую следующий код для выполнения фоновых задач и уведомляю основной поток:
dispatch_queue_t backgroundQueue = dispatch_queue_create("dispatch_queue_#1", 0);
dispatch_async(backgroundQueue, ^{
dispatch_async(dispatch_get_main_queue(), ^{
});
});
Можно ли создать backgroundQueue в одном месте (где лучше всего?) и использовать его позже?
Я знаю о системной глобальной очереди, но для меня важна упорядоченность.
Ответы
Ответ 1
Что-то вроде этого должно работать нормально:
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;
}
Ответ 2
Вы также можете использовать NSOperationQueue и нажимать на него операции. Чтобы убедиться, что операции не исчерпаны, вы можете установить isConcurrent в NO.
Ответ 3
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);
Ответ 4
dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//back ground thread
dispatch_async( dispatch_get_main_queue(), ^{
// main thread
});
});