Все еще получая 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);
}