我有一个ios电子邮件应用程序,一切都很好,除了一个特定的用户帐户信息,我得到的崩溃与什么看起来像一个过度释放的对象。
问题是,如果启用NSZombies (或使用仪器),就不会发生崩溃。每次NSZombies被禁用时都会发生这种情况,但是当我想看看什么是超额发布的时候,应用程序就会像预期的那样运行。
所以我的问题是,如果让僵尸阻止它发生,我该如何追踪?另外,僵尸到底在做些什么来防止坠机,它是否紧紧抓住物体来监视它呢?
发布于 2014-02-18 14:59:06
所以我的问题是,如果让僵尸阻止它发生,我该如何追踪?
如果可能的话,使用更少的-autorelease。
您可以考虑使用Malloc Stack日志记录来缩小分配范围或调用站点。
创建本地自动发布池也可以帮助您识别范围。
有时,记忆涂鸦或护卫Malloc可以有所帮助。
仅仅在Sim/设备上运行可能会导致不同的--甚至是不同的设备模型。
删除所有其他内存问题(例如泄漏、循环引用)也可以帮助您更接近于识别该问题。
您还可以考虑检查地址,如果它是一个标记指针。
甚至在更多地方引入消息传递也有助于缩小范围。如果[obj self]是僵尸,那么obj将是一个错误。
另外,僵尸到底在做些什么来防止坠机,它是否紧紧抓住物体来监视它呢?
是。对象的-dealloc将像往常一样被调用,但是(通常)分配所使用的内存不会被返回,并且实例将变成僵尸--如果消息传递,这个实例会产生运行时错误。
https://stackoverflow.com/questions/21857200
复制相似问题