在调用另一个引用自身的方法的块内调用方法是否会导致保留循环?
可以在这里做第一个保留周期吗?
@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
与块不同,方法不是对象; 他们不能持有对象的永久引用。
您的代码不会导致保留周期。 doSecond
中的代码明确地引用了self
事实并不意味着self
会被保留一段额外的时间。 当你的块调用doSecond
,它的self
来自weakSelf
引用。
注意:将块存储为属性时,请使用(nonatomic, copy)
而不是(nonatomic, strong)
。
不,它不会。 因为它只是指向一个方法,而不仅仅是一个引用像对象一样的方法。