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

时间:2011-05-09 19:49:41

标签: objective-c macos memory-management objective-c-blocks

我对Grand Central Dispatch,块和内存管理有疑问。请考虑以下代码:

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

在这里,我希望doAsyncStuffWithBlock异步发生,然后在它有一些结果时执行阻止。同时这个主要代码将继续。释放myWorker在这里安全吗?我在内部实现的dispatch_queue是否会保留它的引用以最终执行该块?或者,我应该在块中释放它吗?这看起来很奇怪。感谢您的任何建议。

2 个答案:

答案 0 :(得分:4)

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

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

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

是的,您应该在代码中释放myWorker,不,您不应该在块中释放myWorker

答案 1 :(得分:1)

你可以在街区外释放。