我有Cocoa桌面應用程序,就像很多人使用NSDates一樣。現在,其中一個NSDates正在成爲殭屍。它被用在NSUndoManager的堆棧中,所以我認爲這是我不太瞭解的東西。但沒關係,因爲我打算使用Instruments來找出它被保留和釋放的位置。除了樂器表現出非常奇怪的行爲(但是我曾經見過一次或兩次之前的行爲)。我已經張貼截圖在http://taubler.com/zombie.png,並試圖重現儀器的痕跡在這裏:樂器和殭屍;保留計數是1,2,然後突然-1!
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的東西嗎? – drewag 2011-04-05 02:22:51
有趣的問題。也許我會看看我是否可以繼承NSDate並在dealloc中放置一個斷點。 – 2011-04-05 04:13:42
丁丁,我們贏了!這正是發生的事情。現在,如果drewag正式回答了這個問題,我可以投票贊成。 :) – 2011-04-05 04:18:39