В соответствии с переходом к примечаниям к выпуску 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...
}
};
Иногда я получаю предупреждение компилятора о том, что ссылка на себя в блоке может привести к циклу сохранения. Означает ли отсутствие предупреждения, что цикл сохранения не будет создан? Почему предупреждение квалифицируется как «вероятно» привести к циклу удержания?