Alf*_*nso 1 objective-c objective-c-blocks automatic-ref-counting
我有一个带有属性的类,它是对块的弱引用.
@interface BlockTest : NSObject
@property (nonatomic, weak) void(^testBlock)();
@end
Run Code Online (Sandbox Code Playgroud)
在课程的另一点我使用这个块像这样:
- (void)foobar {
self.testBlock = ^{
[self doSomething];
};
}
Run Code Online (Sandbox Code Playgroud)
编译器(Apple LLVM 3.0)抱怨可能存在保留周期,因为self这里强烈捕获.但我没有看到它如何导致保留周期,因为块本身是一个__weak参考,所以应该没问题.如果我正确理解了ARC弱引用,那么当-foobar方法返回时,传递给的块self.testBlock应该被释放(如果没有保存在其他地方),因此也会释放self.
编译器仍然认为可能存在保留周期的原因是什么?
块强烈捕获其中的对象,无论块本身如何被引用.保留周期警告就是这样,警告可能性.如果根据应用程序的上下文知道此用法不会导致保留周期,则可以放心地忽略它.要摆脱警告,您可以通过中间人(强或弱)传递自我,如下所示:
__weak typeof(self) weakSelf = self;
self.testBlock = ^{
[weakSelf doSomething];
};
Run Code Online (Sandbox Code Playgroud)
我会将您的块属性更改为强引用并执行上述操作.
| 归档时间: |
|
| 查看次数: |
1509 次 |
| 最近记录: |