乐器和僵尸;保留计数是1,2,然后突然-1!

时间:2011-04-05 01:53:18

标签: objective-c cocoa cocoa-touch instruments

我有Cocoa桌面应用程序,就像许多人使用NSDates一样。现在,其中一个NSDates正在变成一个僵尸。它被用在NSUndoManager的堆栈中,所以我认为有些东西我不太了解。但这没关系,因为我打算使用Instruments来找出它被保留和释放的位置。除此之外,仪器显示出非常奇怪的行为(但我之前看过一次或两次的行为)。我在http://taubler.com/zombie.png发布了一个屏幕截图,并试图重现仪器的跟踪:

0   __NSCFDate  Malloc  1   00:08.416.441   0x114a92150 16  Foundation  getObjectValue
1   __NSCFDate  Autorelease     00:08.416.462   0x114a92150 0   Foundation  getObjectValue
2   __NSCFDate  Retain  2   00:08.416.576   0x114a92150 0   Proxy   -[SPTask setStart:]
3   __NSCFDate  Release 1   00:09.815.661   0x114a92150 0   Foundation  -[NSAutoreleasePool drain]
4   __NSCFDate  Retain  2   00:10.703.345   0x114a92150 0   Proxy   -[DraggingTask setOrigStart:]
5   __NSCFDate  Release 1   00:10.871.257   0x114a92150 0   Proxy   -[SPTask setStart:]
6   __NSCFDate  Retain  2   00:11.482.473   0x114a92150 0   Foundation  -[NSCFArray insertObject:atIndex:]
7   __NSCFDate  Zombie  -1  00:18.639.856   0x114a92150 0   Proxy   -[SPTask setStart:]

注意保留计数如何从2跳到-1。有谁知道为什么会这样?确实很难找到流氓释放......

提前致谢!

1 个答案:

答案 0 :(得分:8)

如果你直接在一个对象上调用dealloc(这应该永远不会真的完成),就会发生这种情况。