首先我要说的是,我有 Flash/AS3 的背景,我意识到 Flash/AS3 对大多数事情的要求并不像 iPhone/Objective-C 那样严格。
我怀疑我的问题实际上也适用于 AS3,但让我问它与 Obj-c 有关。为什么错误 EXC_BAD_ACCESS 和其他类似的错误如此无用?我意识到这通常意味着某处内存管理不善,但为什么它不能告诉您有关该问题的更多信息。例如,为什么它不说“EXC_BAD_ACCESS,你试图在第 123 行传递指针 suchAndSuch,但是你是个白痴,因为你在第 69 行释放了它,所以它不再可用”?
我意识到我可以使用调试器来获取有关错误发生位置的更多线索,但很多时候这只有一点点帮助。例如,有时堆栈/线程/任何内容中的消息都不是我的代码。其他时候它是我的代码,但在堆栈顶部将是一条具有 4 个以上参数的消息,好的,谢谢调试器,您将其范围缩小到 4 个可能的指针,为什么您不能告诉我是哪一个!?
我猜由于我的背景,我错过了一些基本的解释,不需要担心记忆之类的问题。尽管在 AS3 开发中可能会经常发生一个同样神秘且类似的错误。 “错误#1009:无法访问空对象引用的属性或方法”,这几乎总是意味着您期望保存某些内容的变量实际上是空的。为什么它不告诉我哪个变量?!
因为 Objective-C 的运行时是有意的非常小和简单。您实际上正在编写一个位于金属上的本机应用程序。该应用程序不知道为什么你会得到 EXC_BAD_ACCESS,它只知道你尝试做某事而操作系统拒绝了。 EXC_BAD_ACCESS 表示您正在尝试访问操作系统未提供给您的内存空间。
在 Flash、Java、.NET 等中,有一个庞大、强大的运行时为您运行您的应用程序。它有更多的背景信息,并且对正在发生的事情了解更多。因此,像这样的环境的好处是更清晰的错误消息,通常带有完整的堆栈跟踪。
Xcode 可以帮助您研究僵尸化您的对象。如果您尝试再次使用它们,它们不会释放它们,而是会变成僵尸并尖叫着血腥的谋杀。这有助于查明原因。
您可能还想查看技术问答 http://developer.apple.com/mac/library/qa/qa2004/qa1367.html or the 调试魔法 http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)