Как узнать, что это за синие блоки в инструментах? - PullRequest
0 голосов
/ 30 сентября 2011

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

Снимок экрана шкалы инструментов с графиком распределения http://naituw.com/temp/instruments.png

Когда объект отпущен, синяя линия исчезнет.

Но когда я делаю какую-то операцию в своем приложении, там остается какой-то синий блок, не исчезает. Как я могу узнать, что эти блоки на самом деле находятся в памяти? Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 сентября 2011

Выберите инструмент и посмотрите в список в нижней половине окна. Он покажет таблицу или схему (в зависимости от инструмента) со списком того, что записал инструмент.

Для инструмента Распределения, он перечисляет вещи, выделенные вашим приложением. В зависимости от настроек вида это могут быть объекты, которые еще живы, или все объекты, даже те, которые вы освободили.

Для инструмента «Утечки» он перечисляет то, что ваше приложение выделило и утекло (то есть больше не имеет ссылки). Обратите внимание, что вы все равно можете тратить все больше и больше памяти на вещи, которые никогда не будете использовать, не потому, что у вас нет ссылки на них, а потому, что они находятся в кэше только для записи (вы прячете его, но никогда не ищите) или похожая ситуация. Билл Бумгарнер называет это «заброшенной памятью».

Используя любой инструмент, вы можете нажать на кнопку within в списке, чтобы углубиться в него, чтобы увидеть список распределений определенного типа (например, все NSImages) или все, что произошло с одним объектом, с рождения до смерти. Последний чрезвычайно полезен для поиска как утечек, так и аварий, связанных с избыточным выпуском, и является причиной, по которой шаблон Instruments's Zombies намного лучше, чем NSZombieEnabled.

0 голосов
/ 30 сентября 2011

В приборе утечек это показывает распределение памяти, которое имело место в определенное время.

...