2011-11-21 59 views
0

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

此外,当我配置文件测试程序,我没有得到任何内存泄漏,但如果我删除“免费(mySerialQueue)我得到一个内存泄露 – timv

+1

什么是你的问题? – 2011-11-21 03:58:52

+0

很高兴听到你解决它。 – NJones

回答

0

好了,解决了这个问题:

所以如下我已经解决了,我相信,通过定义我的队列。我误解了并发编程指南,它说dispatch_get_main_queue将在主线程上运行。这个队列是我的需求的正确解决方案,更重要的是允许我的块的序列化按照FIFO顺序运行。谢谢你的输入,因为我还是个新手。