我的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,但它告诉我进程没有运行或没有找到命令。我该如何找出bug发生的地方呢?backtrace只给了NSAutoreleasePoolPop之类的东西。
看在老天爷的份上,我就是找不到这个虫子在哪儿。NSZombiesEnabled告诉我地址,但是malloc_history pid 0x3e93630
只是简单地抛出了一个错误,说gdb不知道这个命令,即使前面有info。
某些内容未被充分保留或过度释放。使用Zombies模板在Instruments中运行你的应用。这将向您显示哪个对象有内存问题,并让您看到该对象的整个保留/释放历史。这会给你指明正确的方向。
霍默的答案是正确的,请不要给我的答案投票。以下是我发布的一些进一步信息:
https://stackoverflow.com/a/19237139/539149我有一个地方写着:
[viewController release];
viewController = NULL;
这导致release被调用两次(因此内存立即被释放),但是直到iOS拥有的对象试图稍后在主线程中引用该对象时才显示僵尸