この質問では、次のコードと保持サイクルについて質問しました。
__weak Cell *weakSelf = self;
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
UIImage *image = /* render some image */
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[weakSelf setImageViewImage:image];
}];
}];
[self.renderQueue addOperation:op];
すべての回答は、このコードでは保持サイクルが発生しないため、ここで弱参照を使用する必要はないと述べています。ただし、さらにいくつかのコードを試してみると、次の結果として保持サイクルが発生します(弱参照を使用しない場合、現在のビューコントローラーの割り当てが解除されません)
//__weak ViewController *weakSelf = self;
MBItem *close = [[MBItem alloc] initWithBlock:^{
[self dismissModalWithDefaultAnimation:NO];
}];
NSMutableArray *items = [[NSMutableArray alloc] initWithObjects:close, nil];
[self.childObject setItems:items];
なぜ2番目のものは保持サイクルをもたらすが最初のものはもたらさないのでしょうか?