我对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/,但我没有发现这太成功了。
答案 0 :(得分:6)
您可以启用NSZombieEnabled环境变量 - 有关如何在Xcode 4上执行此操作的说明,请参阅How do I set up NSZombieEnabled in Xcode 4?。
这意味着释放的对象保留在内存中,因此调试器仍然可以找到对象的类型。发生崩溃时,会告诉您有问题的对象。
“Zombies”Instruments工具非常适合检测此类错误 - 它实际上启用了NZZombieEnabled,您可以使用它来确切地找出发生崩溃的代码行。
答案 1 :(得分:1)
您可以使用类别替换发布方法以用于测试目的,这不是设计为作为语言的一部分工作,但在过去我已经找到成功它尝试做一些测试,通常你发现所有你发现的是自动释放池正在释放你的对象。
答案 2 :(得分:0)
您正在向已发布或具有retainCount 0的内容发送一条释放消息。因此,它会给出这样的错误消息。实际上,我对here的回答可能有所帮助。
答案 3 :(得分:0)
使用Zombies的探查器跟踪实际对象。它将自动启用NSZombies,更重要的是保留所有发布和自动发布消息的历史记录。
Profile
菜单命令。这是带图片的苹果文档:
答案 4 :(得分:-1)
尝试使用属性retainCount
。如果一个对象有retainCount == 0
,那么它将被释放。最终,您将无法向其发送release
消息。