当前位置:  开发笔记 > IOS > 正文

Objective-C"消息发送到解除分配的实例0x5633b0"

如何解决《Objective-C"消息发送到解除分配的实例0x5633b0"》经验,为你挑选了4个好方法。

我似乎在我的obj-C应用程序中有一些过于热心的释放 - 收到错误消息

" - [myobj release]:发送到解除分配的实例0x5633b0的消息"

.我知道导致问题的对象实例的类,但是这个类被用于创建许多实例.

我的想法是我可以在类的init方法中记录一些日志,以记录"0x5633b0"对应的内容,这应该可以帮助我追踪创建实例的位置.

究竟什么是"0x5633b0",有没有什么办法可以在代码中访问该值来记录它?

谢谢.



1> Ori..:

当我最近遇到类似问题时,最适合我的是以下内容:

    Project-> Edit Active Executable - > Arguments选项卡 - > Environment variables部分下,我添加并设置为YES以下变量:NSAutoreleaseFreedObjectCheckEnabled,NSZombieEnabledNSDebugEnabled.

    在"运行"菜单下,我选择了Enable Guard Malloc.

通过这些设置,调试器提供了有关我的代码错误的更多提示.

(我在这里找到了这些提示)

祝你好运,Ori


启用Guard Malloc在设备上进行调试时不起作用,至少我不能,这个帖子确认一下:https://discussions.apple.com/thread/1572993?start = 0&tstart = 0

2> Logan Capald..:

0x5633b0可能是有问题的对象的地址(值self).您可以使用NSLogprintf使用%p它来打印它.


您可以将断点添加到:" - [_ NSZombie methodSignatureForSelector:]",以便在记录"发送到解除分配的实例的消息..."时停止调试器.

3> leviathan..:

0x5633b0可能是解除分配对象的地址(值myobj).您可以使用NSLogprintf使用%p它来打印它.

您还可以使用仪器分析器来查找释放的对象.

1.启动探查器:

在此输入图像描述

2.选择"Zombies"并启动探查器.

在此输入图像描述

3.单击模拟器,直到出现"已解除分配的错误情况"

在此输入图像描述



4> bbrown..:

在调试器中,键入,info symbol 0x5633b0然后您将获得有关它是什么对象的一些指示.另一件可能有用的事情是backtrace,它会为您提供堆栈跟踪.总而言之,这篇博客文章有一些很棒的提示.


`lldb`是`image lookup --address 0x1ec4`或短版本`im loo -a 0x1ec4`.
推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有