Подтвердить что ты не робот

Создать пользовательскую последовательную глобальную диспетчерскую очередь

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

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

   dispatch_async(dispatch_get_main_queue(), ^{


        });
    });

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

4b9b3361

Ответ 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
                      });
                });