Objective-C语言块作为属性
示例
@interface MyObject : MySuperclass @property (copy) void (^blockProperty)(NSString *string); @end
分配时,由于selfretainsblockProperty,block不应包含对self的强引用。这些相互强引用被称为“保留周期”,将防止释放任何一个对象。
__weak __typeof(self) weakSelf = self;
self.blockProperty = ^(NSString *string) {
//在这里仅参考weakSelf。自我会导致保留周期
};这是极不可能的,但self可能会在执行过程中的某个位置释放到块中。在这种情况下,weakSelf变为nil并发送给它的所有消息都不会产生预期的效果。这可能会使应用程序处于未知状态。这可通过保持可避免weakSelf与__strong块执行和清理之后期间的ivar。
__weak __typeof(self) weakSelf = self;
self.blockProperty = ^(NSString *string) {
__strong __typeof(weakSelf) strongSelf = weakSelf;
//在此仅提及strongSelf。
//...
//执行结束时,清理引用
strongSelf = nil;
};
热门推荐
1 泰迪狗狗如何训练
3 狗狗训练图
5 狗狗训练方法
6 训练狗狗不咬人
8 敏捷训练狗狗
10 训练狗狗吃饭
11 泰迪狗狗训练
12 狗狗从多大开始训练
13 狗狗训练学校费用
14 怎么去训练狗狗
15 狗狗训练狗狗
16 狗狗训练教程
17 训练狗狗装死
18 泰迪狗狗的训练方法