我需要知道我是否正确。应用程序运行正常,但我不确定我是否正确地获取生命周期(泄漏?)。块和ARC的内存管理,泄漏?
注意:仪器看不到泄漏。
的方法AAA级代码:一些A级:
- (void) aaa {
NSString *path = ...something...;
NSBlockOperation* theOp = [NSBlockOperation blockOperationWithBlock: ^{
// using path
[self somethingElseWith:path];
}];
[self.aQueue addOperation:theOp];
}
所以我创建了一个块穿上aQueue(NSOperationQueue *)。目标是从主线程卸载长时间运行的somethingElseWith:方法,以便GUI继续响应。
块内我引用了将在aaa:方法结束时超出范围的本地var“路径”。
如果我正确读取了文档,该块将在'路径'上执行保留。但是ARC是否会隐式地在这个块的末尾插入一个版本?将是合乎逻辑的,很好。
或者我应该声明'path'为__block并将其分配给nil在我的块的结尾? (手动...)
不知道我明白如何在这种情况下使用__weak。
谢谢。问题:如果没有使用ARC,那么'path'变量是否也可以?或者在块的末尾需要'[path release]'? – malaba 2012-02-23 10:12:07
@malaba在有或没有ARC的情况下,路径变量都很好,因为块会为你保留路径并在块被释放/超出范围时释放它。 – Joe 2012-02-23 14:08:15