根据过渡到 ARC 发行说明,当在块中引用 self 时,应使用弱引用以避免强引用/保留循环:
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...
}
};
有时,我会收到一个编译器警告,指出在块中引用 self 可能会导致保留循环。没有警告是否意味着不会创建保留周期?为什么警告被限定为“可能”导致保留周期?