2013-02-15 3 views
55

Можно ли отслеживать выделение и освобождение объектов Objective-C? Например, если у меня есть классная книга, я хочу отслеживать все распределения и освобождения объектов типа Book. Я могу отслеживать все классы SKD по умолчанию, такие как UIViewController, UIWindow, UIView, NSDictionary и все такое, но я хочу также отслеживать объекты, созданные из определенных классов.Инструменты Выделение дорожек alloc и dealloc объектов определяемых пользователем классов

ответ

212

Инструмент Allocations можно использовать для отслеживания жизненного цикла ваших объектов. Если вы используете шаблон «Allocations», он настроен для записи событий malloc и free. Вы можете настроить его, чтобы записывать retain, release и autorelease события поворота на «Записи ссылочных подсчетов» флажок в настройках инструмента Отчисления:

record reference counts checkbox

(Вы не можете переключать это время инструментов записи , который он запускается по умолчанию, как только вы выбираете шаблон)

Обновление для Xcode 9:. Apple, сделал его более трудно найти эти настройки. Теперь вам нужно выбрать инструмент Allocations, затем в строке меню выберите «Файл»> «Параметры записи».

После бега, вы можете найти свои объекты с помощью Распределения> Статистик> Резюме Объекта вида, который по умолчанию для Detail панели (нижняя половина окна):

Object Summary setting for Detail pane

Если вы хотите видеть объекты, которые были высвобождены, прежде чем остановили бег, вам необходимо изменить распределение настройки из «Созданный & Still Living» (по умолчанию) на продолжительность жизни «Все объекты, созданные»:

Allocation Lifespan setting

Чтобы найти объекты определенного класса, начните с ввода имени класса в поле поиска в правой части окна панели инструментов. Затем найдите имя класса в столбце «Категория» в виде списка, наведите указатель мыши на него и щелкните стрелку рядом с ней. Например, мое приложение имеет класс с именем Tile, поэтому я ищу для этого, а затем нажмите стрелку рядом с Tile в списке:

Searching

Теперь представление списка показывает каждый экземпляр Tile. (Обратите внимание, что вы должны ввести фактический класс объекта, а не суперкласс. Ввод NSObject будет искать объекты, которые были созданы [NSObject alloc], а не объекты, которые были созданы [Tile alloc].) Я могу просмотреть историю для любого конкретного экземпляра, нажав стрелку рядом с адресом этого экземпляра:

Getting detail

в окне подробностей объекта, я могу видеть malloc и free события и, так как я включил «счетчик ссылок Record», я могу видеть retain, release и autorelease сообщения и их влияние на счет сохранения объекта.Если я хочу, чтобы увидеть стек вызовов для любого из этих событий, я могу открыть расширенную панель детали на правой стороне окна:

extended detail of call stack

+0

Это удивительный пост. +1 для интерактивных изображений. Какое приложение вы использовали для создания этих скриншотов? – gyurisc

+8

Я использовал ScreenFlow для записи экрана и редактирования длины и размера каждого видео. Затем я использовал Photoshop для преобразования каждого видео в анимированный GIF. –

+2

@robmayoff fabulas job, такие люди, как вы, помогаете сообществу ios учиться все больше и больше. – Alok

Смежные вопросы