Objective-C "message sent to deallocated instance 0x5633b0" (该内容不需要翻译)

7 浏览
0 Comments

Objective-C "message sent to deallocated instance 0x5633b0" (该内容不需要翻译)

我在我的obj-C应用程序中似乎存在一些过度释放的问题 - 出现错误信息\n

\n“-[myobj release]: message sent to deallocated instance 0x5633b0”\n

\n。我知道导致问题的对象实例的类,但是这个类在许多地方都用于创建许多实例。\n我想,我可以在该类的init方法中添加一些日志记录,以记录与“0x5633b0”对应的内容,这应该有助于我追踪实例的创建位置。\n“0x5633b0”究竟是什么,我是否可以在代码中获取该值以进行日志记录?\n谢谢。

0
0 Comments

Objective-C中的“message sent to deallocated instance 0x5633b0”问题通常是由于尝试向已被释放的对象发送消息引起的。解决这个问题的方法如下:

1. 确定错误信息中的地址:0x5633b0是被释放对象的地址,可以使用NSLogprintf配合%p打印该地址。

2. 使用Instruments工具来查找被释放的对象:

a. 启动Instruments工具;

b. 选择"Zombies"并启动Profiler;

c. 运行模拟器,直到出现"deallocated error case",并点击进入。

以上方法可以帮助我们定位到被释放的对象,从而解决“message sent to deallocated instance”问题。

为什么你的答案一开始完全复制了某个人的答案?

我可能复制了它,然后没有再次查看。感谢你指出来。我在那里添加了更多的解释。

三年后:谢谢你!

0
0 Comments

在Objective-C中,当我们向一个已被释放的实例发送消息时,就会出现"message sent to deallocated instance"的错误。这个错误的原因是我们试图向一个已经不存在的对象发送消息,导致程序崩溃。

解决这个问题的方法是在代码中找到导致错误的地方,并修复它。下面是一些可能的解决方法:

1. 打印对象地址:通过打印对象的地址,我们可以确定造成问题的实例。可以使用NSLog或printf函数以%p的格式打印地址。例如,在init方法中添加如下代码:NSLog(@"INIT %p", self);。

2. 添加断点:可以在"-[_NSZombie methodSignatureForSelector:]"方法上添加断点,当日志中出现"message sent to deallocated instance"时,调试器会暂停程序执行,方便我们查找问题。

以上就是解决"message sent to deallocated instance"问题的方法。通过定位问题的源头并修复它,我们可以避免该错误,并使程序正常运行。

0
0 Comments

Objective-C中的"message sent to deallocated instance 0x5633b0"问题是由于向已释放的实例发送消息而引起的。解决此问题的方法是在项目设置中进行一些调整。

我最近遇到类似问题时,以下方法对我效果最好:

1. 在项目设置中,点击"Project->Edit Active Executable -> Arguments"选项卡,找到"Environment variables"部分,添加并设置以下变量为YES:NSAutoreleaseFreedObjectCheckEnabledNSZombieEnabledNSDebugEnabled

2. 在运行菜单中,选择"Enable Guard Malloc"。

通过这些设置,调试器将提供有关代码错误的更多线索。

此外,有人指出"Enable Guard Malloc"在设备上调试时无效,可以在此处找到相关讨论。确实如此,Guard Malloc在设备上无法正常工作,而在"diagnostice"选项卡中可以启用它,因此无需在环境变量中设置。但是,可能需要将NSAutoreleaseFreedObjectCheckEnabled设置为环境变量。

祝好运!

Ori

0