我有一个关于中央调度,块和内存管理的问题。考虑下面的代码:
Worker *myWorker = [[Worker alloc] init];
[work doAsyncStuffWithBlock:^(NSMutableDictionary *info)
{
NSLog(@"processing info results");
}];
[myWorker release];在这里,我希望doAsyncStuffWithBlock异步发生,然后在得到一些结果时执行该块。同时,这段主代码将继续运行。在这里发布myWorker安全吗?我在内部实现的dispatch_queue会保留它的引用以最终执行该代码块吗?或者,我应该在块中释放它?这看起来很奇怪。谢谢你的建议。
发布于 2011-05-10 09:34:06
当块引用Objective-C对象时,例如:
Worker *myWorker = [[Worker alloc] init];
[work doAsyncStuffWithBlock:^(NSMutableDictionary *info)
{
NSLog(@"processing info results");
[myWorker doSomething];
}];
[myWorker release];它会自动保留该对象,并且在释放块时,它会自动释放该对象。
所以,是的,你应该在你的代码中释放myWorker,不,你不应该在代码块中释放myWorker。
https://stackoverflow.com/questions/5941743
复制相似问题