我之前没有使用过Zombies,而且必须承认我不确定它在做什么。然而,有一点让我担心:
CFArray似乎在不断增加Live Bytes和#Living专栏以及一些我认为相关的mallocs。这是我的应用程序只是坐在那里,渲染(OpenGL)并等待输入。
我已经尝试过运行泄漏工具,但这并没有表明我在此期间遇到了内存泄漏,甚至没有更多的分配。没有任何分配,更不用说CFArray了。
那么我应该相信哪两种乐器?或者仅仅是因为我不明白Zombies乐器究竟在做什么?
如果有关于僵尸的任何体面的文档,任何人都可以指向我,那将是很酷的。 Apple的文档似乎略微掩盖了它。
答案 0 :(得分:6)
NSZombies基本上用占位符替换已释放的对象,以通知开发人员是否在dealloc之后访问它(显然是一件坏事)。这有助于解决保留/释放问题。
通过打开它,你的应用程序看起来就像是像筛子一样泄漏记忆,因为没有任何东西真的会被释放。通常,我使用NSZombies在调试期间寻找特定的崩溃程序(或者你可以在分配工具中打开Zombies - 这也应该警告你内存使用量只会增加)...我使用Leak Shots中的Leaks或Allocations在功能正常的应用上进行记忆分析的工具。
关于SO的另一个好问题/答案:What is NSZombie?
答案 1 :(得分:2)
启用僵尸看到objc实例在其保留计数达到0时不会被释放(通常,此时将调用dealloc并释放对象的内存)。具体来说,将调用dealloc,但不会释放该对象,并且引用计数将可供以后使用。
当然,还有更多,而且它是一个实现细节:在消息传递系统的某个地方,系统会检查你没有给僵尸发消息(僵尸是一个保留计数为0的对象)。如果你给僵尸发消息,那么系统会为你检测到这个(正如你在启用僵尸时运行时遇到的那样)。