NSZombies:识别代码中的精确对象?

时间:2012-09-19 15:44:26

标签: objective-c ios xcode nszombie

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

现在,我正在......

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

有没有办法在我的代码中指向一行?我的意思是,这比仅仅获得崩溃/错误访问错误有了很大的改进,但这仍然只是将其缩小到某种UIImage内存问题。理想情况下,我希望它说“你在y类的第x行创建的UIImage在被解除分配后被发送了一条isKindOfClass消息。”

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

编辑:更新了标签。无意中有一个旧问题的标签。

3 个答案:

答案 0 :(得分:3)

使用Instruments在iOS模拟器中运行您的应用,然后选择Zombie选项。

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

答案 1 :(得分:0)

作为一个菜鸟我自己,我只是提供我已经看到这个错误与僵尸打开时,我没有在离开视图控制器之前nillify我的代表。例如,如果我有someObject.delegate = self,我可以通过在viewWillDisappear中设置someObject.delegate = nil来避免此错误。

答案 2 :(得分:0)

在Xcode中对一个异常断点进行Slap并且它将捕获僵尸(以及更多其他异常,C ++和Objective-C),因为它会在引发异常时保留任何状态而不会超出Objective-C范围并{{1将所有范围都放入longjmp()

这项工作同时适用于模拟器和设备。我几乎有这个断点,我在任何项目中都放下了第一行代码。