Распределение инструментов отслеживания строкой alloc и dealloc объектов, определяемых пользователем классов
можно ли отслеживать выделение и освобождение моих объектов Objective-C? Например, если у меня есть книга классов, я хочу отслеживать все распределения и освобождения объектов типа книги. Я могу отслеживать все классы SKD по умолчанию, такие как UIViewController, UIWindow, UIView, NSDictionary и все такое, но я хочу отслеживать также объекты, созданные из моих определенных классов.
1 ответ:
вы можете использовать инструмент распределения для отслеживания жизненного цикла ваших объектов. Если вы используете шаблон "распределения", он настроен на запись
malloc
иfree
событий. Вы можете настроить его также для записиretain
,release
иautorelease
события, включив флажок "запись отсчетов ссылок" в настройках инструмента распределения:(вы не можете переключать это во время записи инструментов, которая начинается по умолчанию как как только вы выберете свой шаблон.)
обновление для Xcode 9: Apple сделала его более трудным, чтобы найти эти параметры. Теперь нужно выбрать инструмент выделения, а затем в строке меню выберите Файл > Параметры записи.
после запуска вы можете найти свои объекты, используя представление распределения > статистика > сводка объектов, которое является настройкой по умолчанию для области сведений (нижняя половина окна окно):
если вы хотите видеть объекты, которые были освобождены до остановки выполнения, вам нужно изменить параметр продолжительности жизни распределения с "создано и все еще живет" (по умолчанию) на "все объекты созданы":
найти объекты определенного класса, начните вводить имя класса в поле поиска в правом конце панели инструментов окна. Затем найдите имя класса в столбце категория списка вид наведите на него курсор мыши и щелкните стрелку, которая появляется рядом с ним. Например, в моем приложении есть класс с именем
Tile
, поэтому я ищу это, а затем нажимаю стрелку рядом сTile
в списке:теперь в списке отображаются все экземпляры
Tile
. (Обратите внимание, что вы должны ввести фактический класс объекта, а не суперкласса. ВходNSObject
только найти объекты, которые были созданы[NSObject alloc]
, а не объекты, которые были созданы[Tile alloc]
.) Я можно просмотреть историю для любого конкретного экземпляра, нажав на стрелку рядом с адресом этого экземпляра:в детальном представлении для объекта, я могу видеть
malloc
иfree
события и, так как я включил "Record reference counts", я также могу видетьretain
,release
иautorelease
сообщения и их влияние на счет сохранения объекта. Если я хочу увидеть стек вызовов для любого из этих событий, я могу открыть панель расширенных сведений справа из окна: