Глобальная последовательная очередь отправки - PullRequest
0 голосов
/ 21 ноября 2011

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

Двумя основными причинами является то, что я хочу избежать блокировок, поскольку мне сказали, что @synchronise больше не является лучшей практикой, и у меня есть несколько запросов на получение в Интернет, которые необходимо синхронизировать.является создание последовательной очереди, но ее область действия только в методе, в котором я ее определяю.Я не хочу использовать глобальную очередь в качестве параллельной, и я специально хочу последовательную очередь.

Поэтому я решил ее, определив мою очередь следующим образом:

@interface MyViewController : UIViewController
{
    dispatch_queue_t mySerialQueue;
}

@implementation MyViewController

- (void)viewWillAppear:(BOOL)animated
{
    if (!mySerialQueue) 
    mySerialQueue = dispatch_queue_create("com.myAppQueue", NULL);
}

- (void)myMethod
{
    dispatch_async(mySerialQueue, ^{
    //My block code here
    });
}

- (void)myOtherMethod
{
    dispatch_async(mySerialQueue, ^{
    //My other block code here
    });
}

- (void) viewWillDisappear:(BOOL)animated
{
    free(mySerialQueue);
}

1 Ответ

0 голосов
/ 22 ноября 2011

Ок, решил проблему. Я неправильно понял руководство по программированию параллелизма, в котором говорилось, что dispatch_get_main_queue будет выполняться в главном потоке. Эта очередь - правильное решение для моих требований и, что более важно, позволяет сериализацию моих блоков запускаться в порядке FIFO. Спасибо за ваш вклад, ребята, так как я все еще начинающий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...