Как мне установить NSZombieEnabled
и CFZombieLevel
для моего исполняемого файла в Xcode 4?
Как мне установить NSZombieEnabled
и CFZombieLevel
для моего исполняемого файла в Xcode 4?
Ответы:
В Xcode 4.x нажмите
(или нажмите Menubar
> Product
> Scheme
> Edit Scheme
)
выберите вкладку «Диагностика» и нажмите «Включить объекты зомби»:
Это превращает освобожденные объекты в экземпляры NSZombie, которые печатают предупреждения консоли при повторном использовании. Это средство отладки, которое увеличивает использование памяти (на самом деле ни один объект не освобожден), но улучшает отчеты об ошибках.
Типичный случай, когда вы перепроизводите объект и не знаете какой:
-[UITableView release]: message sent to deallocated instance
Этот параметр XCode игнорируется, когда вы архивируете приложение для отправки в App Store. Вам не нужно ничего трогать перед выпуском приложения.
Нажатие ⌥⌘Rаналогично выбору «Продукт»> «Выполнить», удерживая Altклавишу нажатой.
Установка флажка «Включить объекты-зомби» аналогична добавлению «NSZombieEnabled = YES» вручную в разделе «Переменные среды» на вкладке «Аргументы».
CMD-<
( CMD-SHIFT-comma
), илиProduct -> Scheme -> Edit SCheme...
Ответ Яно - самый простой способ найти его. Другой способ - щелкнуть раскрывающийся список схем -> изменить схему -> вкладку аргументов, а затем добавить NSZombieEnabled в столбце «Переменные среды» и YES в столбце значений ...
Я считаю эту альтернативу более удобной:
Profile
Zombies
Как только зомби обнаружен, вы получаете аккуратный «стек зомби», который показывает вам, когда данный объект был выделен и где он был сохранен или выпущен:
Event Type RefCt Responsible Caller
Malloc 1 -[MyViewController loadData:]
Retain 2 -[MyDataManager initWithBaseURL:]
Release 1 -[MyDataManager initWithBaseURL:]
Release 0 -[MyViewController loadData:]
Zombie -1 -[MyService prepareURLReuqest]
Преимущества по сравнению с использованием диагностической вкладки Схем Xcode :
Если вы забудете снять флажок на вкладке «Диагностика», никакие объекты не будут освобождены из памяти.
Вы получаете более подробный стек, который показывает вам, какими методами ваш поврежденный объект был выделен / освобожден или сохранен.
iOS Simulator > All
из основного списка шаблонов (Вы можете сделать это только в симуляторе)
В Xcode 4.2
или выберите Edit Scheme
из Product
> Scheme
меню
выберите Enable Zombie Objects
форму на Diagnostics
вкладке
В качестве альтернативы, если вы предпочитаете .xcconfig
файлы, вы можете прочитать эту статью https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/
Какао предлагает классную функцию, которая значительно расширяет ваши возможности для отладки таких ситуаций. Это переменная окружения, которая называется NSZombieEnabled, посмотрите это видео , объясняющее настройку NSZombieEnabled в target-C.
В Xcode> 4.3:
Вы щелкаете по раскрывающейся панели схемы -> изменить схему -> вкладку аргументов, а затем добавляете NSZombieEnabled в столбец Переменные среды и YES в столбец значения.
Удачи !!!