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

Dav*_*ler 3 cocoa cocoa-touch objective-c 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:]
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!

dre*_*wag 8

如果直接在对象上调用dealloc(应该永远不会这样做),就会发生这种情况.