Инструменты и зомби; сохранить счет 1, 2, а затем вдруг -1! - PullRequest
3 голосов
/ 05 апреля 2011

У меня есть приложение Cocoa для настольных компьютеров, которое, как и многие другие, использует NSDates. Прямо сейчас, одна из NSDates становится Зомби. Он используется в стеке NSUndoManager, поэтому я думаю, что есть кое-что, что я не совсем понимаю. Но это нормально, потому что я планировал использовать инструменты, чтобы выяснить, где они хранятся и выпускаются. За исключением того, что инструменты показывают очень странное поведение (но поведение, которое я видел один или два раза раньше). Я разместил скриншот на 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 Ответ

8 голосов
/ 05 апреля 2011

Это может произойти, если вы вызываете dealloc для объекта напрямую (что никогда не должно быть сделано).

...