仍然让GCD进入我的脑海,并且遇到一个问题,我希望单个串行队列跨越我的视图控制器的生命周期。我想在类的不同部分的单个队列上执行几个块。
两个主要原因是我想要避免锁定,因为我被告知@synchronise不再是最佳实践,并且有几个需要同步到Internet的请求。
我的解决方案是创建一个串行队列,但其范围仅在我定义它的方法中。我不想将全局队列用作并发队列,我特别想要一个串行队列。
所以我通过如下定义我的队列来解决它:
@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);
}
答案 0 :(得分:0)
好的,解决了这个问题。我误解了并发编程指南,它说 dispatch_get_main_queue 将在主线程上运行。这个队列是我的要求的正确解决方案,更重要的是允许我的块的序列化在FIFO顺序上运行。感谢您输入的内容,因为我仍然是一个新手。