5

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
4

2 回答 2

5

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

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

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

于 2014-02-20T13:35:34.987 回答
0

,不会。因为它只是指向不会在方法内部保存什么的方法,这些方法只是像对象一样的引用。

于 2014-02-20T13:36:22.520 回答