2

我的 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 不知道这个命令,即使前面有信息。

4

2 回答 2

6

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

于 2011-04-18T04:50:24.190 回答
1

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

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

我有一个地方说:

[viewController release];
viewController = NULL;

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

于 2013-10-08T00:41:58.947 回答