2011-04-08 25 views
2

我正在整理我的iPad应用程序中的一些内存分配问题,并花了很长时间看CFString成长和成长(作为一个仍然活着的物体)在僵尸工具下,直到我切换到泄漏或分配工具,我发现它根本没有多大增长(创建并且仍然活着始终保持稳定)任何人都可以解释为什么会发生这种情况在僵尸,但不泄漏或分配仪器,它使我想知道如果CFString是一个问题,或只是僵尸抛出的假阳性....在Zombies仪器下运行时大型CFString分配,但不泄漏或分配仪器

+0

你是指所有的字符串还是只是某个实例/字段? – 2011-04-08 13:19:17

+0

从应用程序中看似无处不在的CFStrings一般很多很多,这些都是生活分配不泄漏 – Matt 2011-04-08 15:15:53

回答

3

僵尸专门不释放内存,以便您可以看到,如果你是访问我在你释放它之后。在使用僵尸时,不能尝试检测泄漏。

根据僵尸工具,你应该只是试图检测僵尸。应用程序的其他行为不一定会相同。为了最大限度地发现访问僵尸的机会,可以使用非标准分配器。

+0

即时通讯不知道这是100%正确的,我可以看到其他分配上升和下降,以及生活对象的数量上升和下降,但CFString似乎螺旋失去控制,这是分配不泄漏我看着 – Matt 2011-04-08 15:17:00

+1

CFString使用自定义分配器 - 也许他们可以重用内存。如果是这样,不释放将导致更多的分配。另外,如果分配器可以共享用户不知道的实例(引擎盖下的引用计数) - 那么必须关闭这个实例,否则您将无法检测到滥用。我怀疑这是预期的行为。 – 2011-04-08 16:54:32

+0

+1 @Matt您看到的许多分配可能都是通过NSString apis分配的。 NSString是CFString - 您可以追踪最重的路径或您关注的路径(在乐器中)。这些(NSStrings)不会被释放,并有意泄露Lou的说法。仪器可以记录每个分配创建的调用堆栈以及每个参考计数操作。 – justin 2011-04-08 17:36:24