代码之家  ›  专栏  ›  技术社区  ›  Coocoo4Cocoa

在iPhone上启用时,Nszombie崩溃应用程序

  •  1
  • Coocoo4Cocoa  · 技术社区  · 16 年前

    我将nszombienabled添加到可执行文件的环境中,以便跟踪我过度释放的对象。我现在发现,我的应用程序的一部分崩溃了,这是以前从未崩溃过的,只有当nszombieEnabled被打开时。我一禁用它,就不会发生崩溃。

    我需要对我的代码进行取证,但这可能意味着什么?nszombieEnabled保留正在发送发布消息的对象。这可能会导致我撞车,但应该吗?

    另外,设置断点-[\nszombie methodsignatureforselector:]并不能提供足够详细的堆栈跟踪来了解发生了什么。

    3 回复  |  直到 16 年前
        1
  •  3
  •   Peter Hosey    16 年前

    如果你的应用程序死机了,而nszombieEnabled,很有可能它死机了,因为它被禁用了,只是没有那么快,也没有那么明显。

    nszombieEnabled保留正在发送发布消息的对象。这可能会导致我撞车,但应该吗?

    不,这不会导致你撞车。导致崩溃的原因是向对象发送过多的发布消息。这就是nszombienabled的目的。

    另外,设置断点-[\nszombie methodsignatureforselector:]并不能提供足够详细的堆栈跟踪来了解发生了什么。

    尝试使用仪器中的ObjectAlloc预设。

        2
  •  3
  •   Brad Larson    16 年前

    在nszombieEnabled下,对象没有完全释放,它们只是变成僵尸。这意味着运行时内存可以累积,特别是在可能生成一组nsstring之类的循环中。您的应用程序可能因内存使用而被终止。

    我犯了一个错误,打开它然后忘记它,然后花了很长时间试图弄明白为什么我的内存使用量在没有任何明显的漏洞的情况下持续增加。

        3
  •  1
  •   Chuck    16 年前

    一种可能性是:您可能通过一个无效的指针访问一个对象,并且幸运地发现另一个兼容的对象恰好被放置在那里。在这种情况下,nszombie将阻止对象被兼容的东西替换,而是将僵尸放在它的位置上。