NSZombies在未启用时崩溃,在启用时可以正常工作

时间:2014-02-18 14:45:59

标签: ios memory-management crash exc-bad-access nszombie

我有一个ios电子邮件应用程序,一切都运行良好,除了一个特定的用户帐户信息,我得到崩溃与看似过度发布的对象相关。

问题是,如果我启用NSZombies(或使用Instruments),则不会发生崩溃。每次禁用NSZombies时都会发生这种情况,但是当我想查看过度发布的内容时,应用程序会按预期执行。

所以我的问题是,如果启用Zombies阻止它发生,我该如何追踪?另外僵尸究竟做了什么来防止崩溃,它是否挂在物体上进行监控?

1 个答案:

答案 0 :(得分:1)

  

所以我的问题是,如果启用Zombies阻止它发生,我该如何追踪?

如果可能,请少用-autorelease

您可以考虑使用 Malloc Stack Logging 来缩小分配范围或调用网站的范围。

创建本地自动释放池也可以帮助您识别范围。

有时,Memory Scribbling或Guard Malloc可以提供帮助。

在Sim / Device上运行可能会产生差异 - 甚至是不同的设备模型。

删除所有其他内存问题(例如泄漏,循环引用)也可以帮助您更接近识别此问题。

如果它是标记指针,您也可以考虑检查地址。

即使在更多地方引入消息传递也可以缩小范围。 <{1}}如果[obj self]是僵尸则会出错。

  

僵尸究竟做了什么来防止崩溃,它是否挂在物体上进行监控?

是。对象的obj将照常调用,但(通常)不会返回分配使用的内存,实例将变为僵尸 - 如果发出消息则会产生运行时错误的实例。