【问题标题】:NSZombies crashing when not enabled, works when enabledNSZombies 未启用时崩溃,启用时工作
【发布时间】:2014-02-18 14:45:59
【问题描述】:

我有一个 ios 电子邮件应用程序,一切正常,除了一个特定的用户帐户信息,我遇到与看起来像是过度释放的对象有关的崩溃。

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

所以我的问题是,如果启用 Zombies 可以防止它发生,我该如何追踪它?另外,Zombies 到底在做什么来防止崩溃,它是不是挂在物体上来监控它?

【问题讨论】:

  • 您是否添加了“所有异常”断点?这可能有助于您追踪崩溃。

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


【解决方案1】:

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

尽可能少使用-autoreleases。

您可能会考虑使用 Malloc 堆栈日志记录 来缩小分配范围或调用站点的范围。

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

有时,Memory Scribbling 或 Guard Malloc 会有所帮助。

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

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

你也可以考虑检查地址,如果它是一个标记的指针。

即使在更多地方引入消息传递也有助于缩小范围。如果obj 是僵尸,[obj self] 将是一个错误。

还有,Zombies 到底在做什么来防止崩溃,它是不是挂在物体上来监视它?

是的。对象的-dealloc 将照常调用,但(通常)分配使用的内存不会被返回,并且实例将变成僵尸 - 如果收到消息,实例会产生运行时错误。

【讨论】:

    猜你喜欢
    • 2012-11-15
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    相关资源
    最近更新 更多