有人可以确认下面的区块是否会变成保留周期吗?请注意,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
答案 0 :(得分:1)
self
?是。sampleClass2
是否会保留该块?可能。这取决于doAnother:
方法的作用。没有代码,就不可能说出来。sampleClass2
保留了块,是否有保留周期?否。存在连接sampleClass2 -> the block -> self
,但是显示的代码中没有任何地方存在从self
到sampleClass2
的连接。答案 1 :(得分:0)
当块在ivar或属性中保持时,只能有保留周期。我们没有看到-[SampleClass2 doAnother:]
对块有什么作用,所以我们不知道。
该块通过引用ivar self
隐式捕获_array
,因此有可能形成参考周期。这取决于谁保留SampleClass1
实例以及SampleClass2
对该块执行的操作。