XCode Zombies показывает увеличение CFArray Live Bytes - PullRequest
4 голосов
/ 03 февраля 2011

Я раньше не использовал Зомби и должен признать, что не уверен, что он делает.Однако меня беспокоит одна вещь:

Кажется, что CFArray непрерывно увеличивает свои Живые байты и # Живые столбцы, а также пару malloc, которые, как я предполагаю, связаны между собой.Это когда мое приложение просто сидит, рендерится (OpenGL) и ждет ввода.

Я попытался запустить инструмент утечки, но это не показывает, что у меня возникают утечки памяти в этот периодили даже больше выделений.Никаких ассигнований ни на что, не говоря уже о CFArray.

Итак, какому из двух инструментов я должен верить?Или просто я не понимаю, что на самом деле делает инструмент «Зомби»?

Если есть какая-нибудь достойная документация по зомби, на которую кто-нибудь может указать мне, это было бы круто.Документы Apple, кажется, немного затушевывают.

Ответы [ 2 ]

6 голосов
/ 03 февраля 2011

NSZombies в основном заменяет освобожденные объекты местозаполнителем, чтобы уведомить разработчика, если к нему обращались после dealloc (очевидно, это плохо).Это помогает решить проблемы сохранения / выпуска.

При включении ваше приложение будет выглядеть так, будто оно теряет память, как сито, потому что ничто никогда не будет действительно освобождено.Обычно я использую NSZombies для поиска определенных сбоев во время отладки (или вы можете включить Zombies в инструменте Allocations - который также должен предупредить вас, что использование памяти будет только возрастать) ... Я использую Leaks или Allocations w / Heap Shots винструменты для анализа памяти в работающем приложении.

Еще один хороший вопрос / ответ по SO: Что такое NSZombie?

2 голосов
/ 03 февраля 2011

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

Конечно, есть еще кое-что, и это деталь реализации: где-то в системе обмена сообщениями,Система проверит, что вы не отправляете сообщение зомби (зомби - это объект, у которого счетчик удержаний равен 0).если вы отправите сообщение зомби, система обнаружит это для вас (как вы, возможно, столкнулись при работе с включенными зомби).

...