iOS应用程序因“发送到已解除分配的实例的消息”而崩溃

时间:2011-04-18 04:38:36

标签: cocoa-touch ios debugging uialertview nsautoreleasepool

我的iOS应用程序具有许多网络功能。我当然将重要数据保存到文件系统以供离线查看等等,并且使用完美地工作而没有任何问题。现在,当我尝试使用飞行模式进行测试时,模拟没有互联网连接,GDB输出:

2011-04-17 21:34:13.291 Bronto Backup Mobile App[195:307] *** -[UIAlertView release]: message sent to deallocated instance 0x3e93630

我在gdb中尝试过malloc调试,但它告诉我进程没有运行或找不到命令。我该如何找出错误发生的位置? backtrace只给了我通常的NSAutoreleasePoolPop东西。

为了爱我,我无法追查这个错误的位置。 NSZombiesEnabled告诉我地址​​,但malloc_history pid 0x3e93630只是告诉我一个错误,说gdb不知道这个命令,即使前面有信息。

2 个答案:

答案 0 :(得分:6)

某些东西被保留不足或过度释放。使用Zombies模板在Instruments中运行您的应用程序。这将显示哪个对象有内存问题,并且可以让您查看该对象的整个保留/发布历史记录。这应该指向正确的方向。

答案 1 :(得分:1)

BJ Homer's answer是正确的,请不要回答我的回答。以下是我发布的一些进一步信息:

https://stackoverflow.com/a/19237139/539149

我有个地方说:

[viewController release];
viewController = NULL;

导致释放被调用两次(因此内存被立即释放)但是直到iOS拥有的对象试图在主线程中稍后引用该对象时才显示僵尸。 < / p>