【发布时间】:2011-07-29 14:42:38
【问题描述】:
我有 Cocoa 桌面应用程序,它和许多人一样使用 NSDates。现在,其中一个 NSDates 正在变成僵尸。它在 NSUndoManager 的堆栈中使用,所以我认为有些东西我不太了解。但这没关系,因为我打算使用 Instruments 来找出它在哪里被保留和发布。除了,仪器表现出非常奇怪的行为(但我以前见过一两次的行为)。我在http://taubler.com/zombie.png 发布了截图,并尝试在此处重现 Instruments 的踪迹:
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。有谁知道为什么会这样?确实很难找到流氓释放...
提前致谢!
【问题讨论】:
-
有什么东西直接在上面调用dealloc吗?
-
有趣的问题。也许我会看看我是否可以继承 NSDate 并在 dealloc 处放置一个断点。
-
叮叮,我们赢了!这正是正在发生的事情。现在如果drawag正式回答这个问题,我可以投票给它。 :)
-
太棒了——我也遇到了同样的问题……谢谢你的想法,戴夫!就我而言,当我应该 [释放] 时,我错误地 [dealloc]。
标签: objective-c cocoa cocoa-touch instruments