1

简而言之,我是一个 NSZombies 菜鸟。我刚刚开始尝试使用它们进行调试,因为直到现在,我已经能够在没有它们的情况下解决我的所有内存问题。

现在,我越来越...

[UIImage isKindOfClass:]: message sent to deallocated instance 0x8095f10

有没有办法在我的代码中指出这一点?我的意思是,与仅仅出现崩溃/错误访问错误相比,这是一个很大的改进,但这仍然只是将其缩小到某种 UIImage 内存问题。理想情况下,我想说“您在 y 类的 x 行创建的 UIImage 在被释放后发送了 isKindOfClass 消息。”

另外,我很确定我的代码中没有任何地方首先使用将 isKindOfClass 发送到 UIImage 。UIImage 是否在其代码中的某处使用该方法?

编辑:更新标签。不小心有一个旧问题的标签。

4

3 回答 3

3

使用 Instruments 在 iOS 模拟器中运行您的应用程序并选择 Zombie 选项。

重新创建导致问题的条件,然后您应该能够查看隐藏系统符号的反向堆栈跟踪,它将带您直接到代码中引用僵尸的位置。它可能不会告诉您它在哪里被释放,但它肯定会帮助您缩小错误的范围。

于 2012-09-19T16:13:53.337 回答
0

作为我自己的菜鸟,我只想说,当我在离开视图控制器之前未能取消我的代表时,我已经看到了这个错误,僵尸打开了。例如,如果我有 someObject.delegate = self,我可以通过在 viewWillDisappear 中设置 someObject.delegate = nil 来避免此错误。

于 2012-09-19T15:50:36.050 回答
0

在 Xcode 中的异常断点上拍打它会捕获僵尸(以及更多其他异常,C++ 和 Objective-C),因为它会在引发异常时保留任何状态,而不会超出 Objective-C 范围和longjmp()'d 超出所有范围进入main().

这适用于模拟器和设备。从我在任何项目中放置第一行代码开始,我就几乎有了这个断点。

于 2013-06-06T09:22:12.953 回答