ARCリリースノートへの移行によると、ブロック内で自分自身を参照する場合は、強い参照/保持サイクルを回避するために弱い参照を使用する必要があります。
MyViewController *myController = [[MyViewController alloc] init…];
// ...
MyViewController * __weak weakMyController = myController;
myController.completionHandler = ^(NSInteger result) {
MyViewController *strongMyController = weakMyController;
if (strongMyController) {
// ...
[strongMyController dismissViewControllerAnimated:YES completion:nil];
// ...
}
else {
// Probably nothing...
}
};
時々、ブロック内で自分自身を参照すると保持サイクルが発生する可能性があるというコンパイラの警告が表示されます。警告がないということは、保持サイクルが作成されないことを意味しますか?警告が保持サイクルにつながる可能性が高いと見なされるのはなぜですか?