在调用另一个引用self的方法的块中调用方法会导致保留周期吗?

JRG*_*per 5 ios retain-cycle

可以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
Run Code Online (Sandbox Code Playgroud)

das*_*ght 5

与块不同,方法不是对象; 他们不能永久引用对象.

您的代码不会导致保留周期.显式内部doSecond引用代码的事实self并不意味着self会保留额外的时间.当你的块调用时doSecond,它self来自weakSelf内部的引用doFirst.

注意:将块存储为属性时,请使用(nonatomic, copy)而不是(nonatomic, strong).