在调用另一个引用自身的方法的块内调用方法是否会导致保留循环?

可以在这里做第一个保留周期吗?

 @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)

不,它不会。 因为它只是指向一个方法,而不仅仅是一个引用像对象一样的方法。

Interesting Posts