我似乎在我的obj-C应用程序中有一些过于热心的释放 - 收到错误消息
" - [myobj release]:发送到解除分配的实例0x5633b0的消息"
.我知道导致问题的对象实例的类,但是这个类被用于创建许多实例.
我的想法是我可以在类的init方法中记录一些日志,以记录"0x5633b0"对应的内容,这应该可以帮助我追踪创建实例的位置.
究竟什么是"0x5633b0",有没有什么办法可以在代码中访问该值来记录它?
谢谢.
当我最近遇到类似问题时,最适合我的是以下内容:
在Project-> Edit Active Executable - > Arguments选项卡 - > Environment variables部分下,我添加并设置为YES
以下变量:NSAutoreleaseFreedObjectCheckEnabled
,NSZombieEnabled
和NSDebugEnabled
.
在"运行"菜单下,我选择了Enable Guard Malloc.
通过这些设置,调试器提供了有关我的代码错误的更多提示.
(我在这里找到了这些提示)
祝你好运,Ori
0x5633b0
可能是有问题的对象的地址(值self
).您可以使用NSLog
或printf
使用%p
它来打印它.
0x5633b0
可能是解除分配对象的地址(值myobj
).您可以使用NSLog
或printf
使用%p
它来打印它.
您还可以使用仪器分析器来查找释放的对象.
1.启动探查器:
2.选择"Zombies"并启动探查器.
3.单击模拟器,直到出现"已解除分配的错误情况"
在调试器中,键入,info symbol 0x5633b0
然后您将获得有关它是什么对象的一些指示.另一件可能有用的事情是backtrace
,它会为您提供堆栈跟踪.总而言之,这篇博客文章有一些很棒的提示.