我打开Xcode的新标志,并得到警告“弱接收器可在ARC模式不可预知空”。 这让我困惑,因为当然它可能是零。
Answer 1:
我一个星期前问这个问题并没有得到答复,但格雷格·帕克回答了在邮件列表中。 所以我的答案重新发布。
因为我们看到大量的实践微妙和难以调试的问题,我们增加了这个警告。
建议的做法是读取弱变成一个强大的本地变量一次,然后使用本地变量。
- 格雷格·帕克
在我这个问题的第一个化身,我张贴了这样的事情,在这里我想测试零应该已经够了
if (self.rootViewController) {
[self.rootViewController controllerWillChangeContent:controller];
}
问题是,self.rootViewController可能成为检查零和完成调用的方法之间的空间nill。 我们被告知要做的是分配给一个强大的本地参考和使用,像这样
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
RootViewController *rootVC = self.rootViewController;
if (rootVC) {
[rootVC controllerWillChangeContent:controller];
}
}
斯蒂芬·巴特勒呈现简洁重述这个问题的警告是为了打击
我们正在试图阻止是当你在[的someMethod]是因为你把它叫做关弱引用,并没有什么握住强烈反对越来越dealloced对象实例。
文章来源: How to properly address “Weak receiver may be unpredictably null in ARC mode”