Cocoa touch 全局串行调度队列

Cocoa touch 全局串行调度队列,cocoa-touch,grand-central-dispatch,Cocoa Touch,Grand Central Dispatch,我仍然在想GCD,并且有一个问题,我想要一个串行队列来跨越我的视图控制器的生命周期。我想在类的不同部分的单个队列上执行几个块 两个主要原因是我想避免锁,因为我被告知@synchronise不再是最佳实践,我需要同步多个到internet的get请求 我的解决方案是创建一个串行队列,但它的作用域仅在我定义它的方法中。我不想使用全局队列作为并发队列,我特别想要一个串行队列 我相信,通过如下定义我的队列,我已经解决了这个问题: @interface MyViewController : UIViewC

我仍然在想GCD,并且有一个问题,我想要一个串行队列来跨越我的视图控制器的生命周期。我想在类的不同部分的单个队列上执行几个块

两个主要原因是我想避免锁,因为我被告知@synchronise不再是最佳实践,我需要同步多个到internet的get请求

我的解决方案是创建一个串行队列,但它的作用域仅在我定义它的方法中。我不想使用全局队列作为并发队列,我特别想要一个串行队列

我相信,通过如下定义我的队列,我已经解决了这个问题:

@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);
}

好了,问题解决了。我误解了《并发编程指南》,其中说dispatch\u get\u main\u队列将在主线程上运行。此队列是满足我的要求的正确解决方案,更重要的是,它允许按FIFO顺序运行我的块序列化。谢谢你们的支持,因为我还是个新手。

另外,当我评测测试应用程序时,我没有内存泄漏,但是如果我删除“free”(mySerialQueue)我很高兴听到你已经解决了内存泄漏问题。你应该用
dispatch\u release
释放队列,而不是
free
。此外,你需要在
viewwillbeen:
viewdidebeen:
的实现中调用super。此外,我真的不知道这比使用
dispatch\u async>有什么好处您需要它的地方。您好,我的问题是,在我的h文件中全局声明串行队列是最佳做法吗?使用free()释放它可以吗?假设在必要的方法中调用super,因为我只包含与我的问题相关的代码。因此,为没有更清楚而道歉。