如何使用Xcode检测被双重释放的对象 - 发送到解除分配的实例的消息?

sor*_*rin 0 objective-c xcode4

我对Xcode4比较陌生,我想知道如何用它来识别双版本.

在调试器中,我看到一行*** -[NSConcreteMutableData release]: message sent to deallocated instance 0x60b63fe0.

问题是知道地址对识别对象没有多大帮助,而且对象类型也没有太多帮助识别它.

我阅读http://www.friday.com/bbum/2010/01/10/using-malloc-to-debug-memory-misuse-in-cocoa/但我没有发现这太成功了.

小智 6

您可以启用NSZombieEnabled环境变量 - 请参阅如何在Xcode 4中设置NSZombieEnabled?有关如何在Xcode 4上执行此操作的说明.

这意味着释放的对象保留在内存中,因此调试器仍然可以找出对象的类型.发生崩溃时,会告诉您有问题的对象.

"Zombies"Instruments工具非常适合检测此类错误 - 它实际上启用了NZZombieEnabled,您可以使用它来确切地找出发生崩溃的代码行.