以下GCD /块方案的推荐模式是什么?

问题描述:

我有一个关于Grand Central Dispatch,块和内存管理的问题。考虑以下代码:以下GCD /块方案的推荐模式是什么?

Worker *myWorker = [[Worker alloc] init]; 
[work doAsyncStuffWithBlock:^(NSMutableDictionary *info) 
{ 
    NSLog(@"processing info results"); 
}]; 
[myWorker release]; 

在这里,我想doAsyncStuffWithBlock异步发生,然后执行该块时,它有一定的效果。同时这个主代码将继续。在这里安全地释放myWorker是否安全?我在内部实现的dispatch_queue会保留一个引用来最终执行该块吗?或者,我应该在块内释放它吗?这似乎很奇怪。感谢您的任何建议。

+0

您发布的代码除了初始化和释放之外不会对'myWorker'执行任何操作:它将立即释放。此外,您的代码不会显示有关提到的调度队列的任何信息。 – 2011-05-09 19:57:41

当一个块的引用一个Objective-C的对象,例如:

Worker *myWorker = [[Worker alloc] init]; 
[work doAsyncStuffWithBlock:^(NSMutableDictionary *info) 
{ 
    NSLog(@"processing info results"); 
    [myWorker doSomething]; 
}]; 
[myWorker release]; 

它自动保留该对象,并且该块被释放时,它会自动释放该对象。

所以是的,你应该在你的代码中释放myWorker,不,你不应该在块内部释放myWorker

+0

感谢您的确认。 – 2011-05-11 03:17:37

阅读

可以外块释放。

+0

感谢您的链接 – 2011-05-11 03:18:19

+0

良好的链接,但答案太短。 – 2011-05-24 00:52:59