如何妥善解决“弱接收器可在ARC模式不可预知空”(How to properly address “

2019-07-30 21:37发布

我打开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”