我有一个ios电子邮件应用程序,一切都运行良好,除了一个特定的用户帐户信息,我得到崩溃与看似过度发布的对象相关。
问题是,如果我启用NSZombies(或使用Instruments),则不会发生崩溃。每次禁用NSZombies时都会发生这种情况,但是当我想查看过度发布的内容时,应用程序会按预期执行。
所以我的问题是,如果启用Zombies阻止它发生,我该如何追踪?另外僵尸究竟做了什么来防止崩溃,它是否挂在物体上进行监控?
答案 0 :(得分:1)
所以我的问题是,如果启用Zombies阻止它发生,我该如何追踪?
如果可能,请少用-autorelease
。
您可以考虑使用 Malloc Stack Logging 来缩小分配范围或调用网站的范围。
创建本地自动释放池也可以帮助您识别范围。
有时,Memory Scribbling或Guard Malloc可以提供帮助。
在Sim / Device上运行可能会产生差异 - 甚至是不同的设备模型。
删除所有其他内存问题(例如泄漏,循环引用)也可以帮助您更接近识别此问题。
如果它是标记指针,您也可以考虑检查地址。
即使在更多地方引入消息传递也可以缩小范围。 <{1}}如果[obj self]
是僵尸则会出错。
僵尸究竟做了什么来防止崩溃,它是否挂在物体上进行监控?
是。对象的obj
将照常调用,但(通常)不会返回分配使用的内存,实例将变为僵尸 - 如果发出消息则会产生运行时错误的实例。