我有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。有谁知道为什么会这样?确实很难找到流氓释放......
提前致谢!
答案 0 :(得分:8)
如果你直接在一个对象上调用dealloc(这应该永远不会真的完成),就会发生这种情况。