0

以下のブロックが保持サイクルに変わっているかどうか誰か確認できますか? このブロックは、SampleClass1 ではなく SampleClass2 によって呼び出されていることに注意してください。

@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接続はありますが、示されているコードのどこにも からselfへの接続はありませんsampleClass2
于 2013-12-12T23:36:07.087 に答える
0

ブロックがivarまたはプロパティに保持されている場合にのみ、保持サイクルが存在する可能性があります。-[SampleClass2 doAnother:]ブロックがどうなるかわからないので、わかりません。

ブロックはselfivar を参照して暗黙的にキャプチャ_arrayするため、参照サイクルが形成される可能性があります。SampleClass1誰がインスタンスを保持SampleClass2し、ブロックをどうするかによって異なります。

于 2013-12-12T16:32:42.573 に答える