这里可以doFirst
导致保留周期吗?
@interface Example : NSObject
@property (nonatomic, strong) void (^block)();
@end
@implementation Example
- (void)doFirst
{
__weak id weakSelf = self;
self.block = ^ {
[weakSelf doSecond];
};
self.block();
}
- (void)doSecond
{
self.value = //...
// do other stuff involving self
}
@end
答案 0 :(得分:5)
与块不同,方法不是对象;他们不能永久引用对象。
您的代码不会导致保留周期。 doSecond
中的代码明确引用self
这一事实并不意味着self
会保留额外的时间。当您的区块调用doSecond
时,其self
来自weakSelf
内的doFirst
引用。
注意:将块存储为属性时,use (nonatomic, copy)
代替(nonatomic, strong)
。
答案 1 :(得分:0)
否不会。因为它只是指向一个方法,它不会在像引物这样的对象的内部方法中占据什么。