[英]How to properly address “Weak receiver may be unpredictably null in ARC mode”
我在xcode中打开了一个新标志并收到警告“弱接收器在ARC模式下可能无法预测为空”。 这让我感到困惑,因为因为它可能是零。
我在一周前问过这个问题并且没有得到答复,但Greg Parker在邮件列表上回答了这个问题。 所以我转发答案。
我们添加了这个警告,因为我们在实践中看到了许多微妙且难以调试的问题。
建议的做法是将弱变量读入一个强大的局部变量,然后使用局部变量。
- 格雷格帕克
在我这个问题的第一个版本中,我发布了类似这样的内容,我认为测试nil应该已经足够了
if (self.rootViewController) {
[self.rootViewController controllerWillChangeContent:controller];
}
问题是self.rootViewController可以在检查nil和完成调用方法之间的空间中成为nill。 我们被告知要做的是分配一个强大的本地参考并使用它
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
RootViewController *rootVC = self.rootViewController;
if (rootVC) {
[rootVC controllerWillChangeContent:controller];
}
}
斯蒂芬巴特勒简要地重述了这个警告意图打击的问题
我们试图阻止的是当你在[someMethod]中时对象实例被释放,因为你将它从弱引用中调出来并且没有任何东西强烈地保持在对象上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.