0

有人可以确认下面的块是否正在变成保留周期吗?请注意,该块是由 SampleClass2 而不是 SampleClass1 调用的。

@interface SampleClass1{
    NSArray *_array;
}

@implementation SampleClass1

-(void) doSomething {
    SampleClass2 *sampleClass2 = [[SampleClass2 alloc] init];
    [sampleClass2 doAnother:^(NSArray *anotherArray){
        _array = anotherArray;      // _array is an ivar
    }];
}

@end
4

2 回答 2

1
  • 块是否保留self是的。
  • 是否sampleClass2保留块?也许。这取决于doAnother:方法的作用。没有代码,就不可能说。
  • 即使我们假设sampleClass2保留块,是否存在保留循环?没有。有一个连接sampleClass2 -> the block -> self,但是从显示的代码中看不到从selfto的连接sampleClass2
于 2013-12-12T23:36:07.087 回答
0

只有当块被保留在 ivar 或属性中时,才会有保留周期。我们看不到-[SampleClass2 doAnother:]块有什么作用,所以我们不知道。

该块确实self通过引用 ivar 隐式捕获_array,因此有可能形成引用循环。这取决于谁保留了SampleClass1实例以及SampleClass2对块做了什么。

于 2013-12-12T16:32:42.573 回答