全局串行调度队列

时间:2011-11-21 02:40:02

标签: cocoa-touch grand-central-dispatch

仍然让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);
}

1 个答案:

答案 0 :(得分:0)

好的,解决了这个问题。我误解了并发编程指南,它说 dispatch_get_main_queue 将在主线程上运行。这个队列是我的要求的正确解决方案,更重要的是允许我的块的序列化在FIFO顺序上运行。感谢您输入的内容,因为我仍然是一个新手。