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

时间:2014-02-20 13:32:30

标签: 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

2 个答案:

答案 0 :(得分:5)

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

您的代码不会导致保留周期。 doSecond中的代码明确引用self这一事实并不意味着self会保留额外的时间。当您的区块调用doSecond时,其self来自weakSelf内的doFirst引用。

注意:将块存储为属性时,use (nonatomic, copy)代替(nonatomic, strong)

答案 1 :(得分:0)

不会。因为它只是指向一个方法,它不会在像引物这样的对象的内部方法中占据什么。