我对Grand Central Dispatch,块和内存管理有疑问。请考虑以下代码:
Worker *myWorker = [[Worker alloc] init];
[work doAsyncStuffWithBlock:^(NSMutableDictionary *info)
{
NSLog(@"processing info results");
}];
[myWorker release];
在这里,我希望doAsyncStuffWithBlock异步发生,然后在它有一些结果时执行阻止。同时这个主要代码将继续。释放myWorker在这里安全吗?我在内部实现的dispatch_queue是否会保留它的引用以最终执行该块?或者,我应该在块中释放它吗?这看起来很奇怪。感谢您的任何建议。
答案 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)