mal*_*aba 2 cocoa cocoa-touch objective-c objective-c-blocks automatic-ref-counting
我需要知道我是否正确地做到了.应用程序运行正常但我不确定我的生命周期是否正确(泄漏?).
注意:仪器看不到泄漏.
方法aaa的代码:某些类A的代码:
- (void) aaa {
NSString *path = ...something...;
NSBlockOperation* theOp = [NSBlockOperation blockOperationWithBlock: ^{
// using path
[self somethingElseWith:path];
}];
[self.aQueue addOperation:theOp];
}
Run Code Online (Sandbox Code Playgroud)
所以我创建了一个块来放置aQueue(NSOperationQueue*).目标是从主线程中卸载长时间运行的somethingElseWith:方法,以便GUI继续响应.
在块内部,我引用了aaa:方法末尾超出范围的本地var"path".
如果我正确地阅读了文档,那么该块将在'path'上保留.但ARC是否隐含地在此块的末尾插入了一个版本?这将是合乎逻辑和美好的.
或者我应该将'path'声明为__block并在块的末尾将其指定为nil?(手册...)
我不确定我是否理解如何在此上下文中使用__weak.
该path
变量是罚款.但是,您可能需要使用weak
引用来避免保留周期self
.如果aQueue
是strong
参考,则可能存在导致self
永不释放的保留周期.
解:
- (void) aaa {
NSString *path = ...something...;
__weak id self_ = self;
NSBlockOperation* theOp = [NSBlockOperation blockOperationWithBlock: ^{
// using path
[self_ somethingElseWith:path];
}];
[self.aQueue addOperation:theOp];
}
Run Code Online (Sandbox Code Playgroud)
确保在该类不再存在后不会调用该操作.
归档时间: |
|
查看次数: |
1876 次 |
最近记录: |