gpt4 book ai didi

objective-c - 为什么 EXC_BAD_ACCESS 如此无用?

转载 作者:太空狗 更新时间:2023-10-30 03:23:46 24 4
gpt4 key购买 nike

首先让我说我有 Flash/AS3 的背景,我意识到它对大多数事情并不像 iPhone/Objective-C 那样严格。

我怀疑我的问题实际上也适用于 AS3,但让我把它作为与 Obj-c 相关的问题来问。为什么错误 EXC_BAD_ACCESS 和其他类似错误如此无用?我意识到这通常意味着某处内存管理不善,但为什么它不能告诉您更多有关该问题的信息。例如,为什么它不说“EXC_BAD_ACCESS,你试图在第 123 行传递指针 suchAndSuch,但是你是个白痴,因为你在第 69 行释放它所以它不再可用”?

我意识到我可以使用调试器获得更多关于我的错误发生位置的线索,但很多时候这只是略有帮助。例如,有时堆栈/线程/任何东西中的消息都不是我的代码。其他时候它是我的代码,但在堆栈顶部将是一条具有 4 个以上参数的消息,好的,感谢调试器,你将它缩小到 4 个可能的指针,为什么你不能告诉我是哪一个!?

我猜我只是因为我的背景而错过了一些基本的解释,不需要担心内存等问题。尽管在 AS3 开发中经常会发生同样神秘且沿用相同思路的错误。 “错误 #1009:无法访问空对象引用的属性或方法”,这几乎总是意味着您期望持有的变量实际上是空的。为什么它不告诉我哪个变量?!

最佳答案

因为 Objective-C 的运行时是故意的,非常小和简单。您实际上是在编写一个直接安装在金属上的 native 应用程序。该应用程序不知道您为什么收到 EXC_BAD_ACCESS,它只知道您尝试做某事而操作系统拒绝了。 EXC_BAD_ACCESS 表示您正在尝试访问操作系统未提供给您的内存空间。

在 Flash、Java、.NET 等中,有一个庞大而强大的运行时坐在那里为您运行您的应用程序。它有更多的上下文,并且对正在发生的事情了解更多。因此,这样的环境的一个好处是错误消息更加清晰,通常带有完整的堆栈跟踪。

Xcode 可以帮助您研究僵尸化您的对象。如果您再次尝试使用它们,它们不会重新分配,而是会变成僵尸并尖叫着血腥的谋杀。这有助于确定原因。

您可能还想查看 Technical Q&ADebugging Magic

关于objective-c - 为什么 EXC_BAD_ACCESS 如此无用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2060435/

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