gpt4 book ai didi

ios - 为什么 iPhone 5S 和 iPad Air 之前的设备在转换 null 变量时不会崩溃?

转载 作者:行者123 更新时间:2023-11-28 22:05:50 25 4
gpt4 key购买 nike

我在这里提取了代码,因为原始代码非常庞大:

-(void)something {
// At this point, self.parent is NOT null
[self boom];
SomeClass *variable = (SomeClass*)self.parent;
[variable someMethod];
}

-(void)boom {
self.parent = nil;
}

当然,如果你调用 something,这会崩溃,因为 self.parent 被取消了,然后你试图转换它并调用它的方法。

所以事情是,这从来没有让我崩溃。我的意思是,几个月来,这段代码一直完好无损,我的应用程序从未崩溃过。

现在它因两个特定配置而崩溃

  • iPhone 5S,最新的 iOS
  • iPad Air,最新的 iOS

所有其他以前的设备,以及最新的 iOS,都没有崩溃。

虽然上面的代码片段不是我的代码,但我很确定它反射(reflect)了正在发生的事情。

这怎么可能?我在这里遗漏了什么吗?

最佳答案

我不怀疑你在实际项目中遇到了崩溃,但是当你把问题找出来张贴在这里时(一个非常令人钦佩的做法,顺便说一下,我希望更多的人这样做),我认为你找出了崩溃的真正根源。

消息 nil 非常好。转换发生在编译时,转换一个在运行时可能为 nil 的变量是完全没问题的。

当对象实际上是 Foo 时将其转换为 Bar,然后对其调用 Bar 方法将导致 NSInvalidArgumentException(无法识别的选择器)。

但这并没有发生在 OP 代码中。 variable 可以是 SomeClass 的 nil 实例。对其调用任何方法都不会导致崩溃。

关于ios - 为什么 iPhone 5S 和 iPad Air 之前的设备在转换 null 变量时不会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24006504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com