Как мне установить NSZombieEnabled в Xcode 4? - PullRequest
456 голосов
/ 03 февраля 2010

Как мне настроить NSZombieEnabled и CFZombieLevel для моего исполняемого файла в Xcode 4?

Ответы [ 7 ]

754 голосов
/ 07 февраля 2011

В Xcode 4.x нажмите

R

(или нажмите Menubar> Product> Scheme> Edit Scheme)

выберите вкладку «Диагностика» и нажмите «Включить объекты-зомби»:

Click

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

Типичный случай, когда вы перепускаете объект и не знаете какой:

  • С зомби: -[UITableView release]: message sent to deallocated instance
  • Без зомби: EXC_BAD_ACCESS

Этот параметр Xcode игнорируется при архивировании приложения для отправки в App Store. Вам не нужно ничего трогать перед выпуском приложения.

Нажатие R аналогично выбору Product> Run при удержании нажатой клавиши Alt .
Установка флажка «Включить объекты-зомби» аналогична добавлению «NSZombieEnabled = YES» вручную в разделе «Переменные среды» на вкладке «Аргументы».

70 голосов
/ 16 марта 2011

Ответ Яно - самый простой способ найти его. Другой способ - щелкнуть раскрывающийся список схем -> изменить схему -> вкладку аргументов, а затем добавить NSZombieEnabled в столбце «Переменные среды» и YES в столбце значений. ...

57 голосов
/ 14 января 2012

Я считаю эту альтернативу более удобной:

  1. Нажмите на кнопку «Run Button Dropdown»
  2. Из списка выберите Profile
  3. Должна открыться программа «Инструменты», где вы также можете выбрать Zombies
  4. Теперь вы можете взаимодействовать со своим приложением и пытаться вызвать ошибку
  5. Как только возникает ошибка, вы должны получить подсказку, когда ваш объект был освобожден и, следовательно, освобожден.

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 :

  1. Если вы забудете снять флажок с опции на вкладке «Диагностика», то никакие объекты не будут освобождены из памяти.

  2. Вы получаете более подробный стек, показывающий, какими методами был выделен / освобожден или сохранен ваш поврежденный объект.

5 голосов
/ 11 апреля 2012

В Xcode 4.2

  • Название проекта / Схема редактирования / Диагностика /
  • Флажок Включить объекты-зомби
  • Вы сделали
4 голосов
/ 20 августа 2015

Вкл в Xcode 7

<</kbd>

или выберите Edit Scheme из Product> Scheme Меню

выберите Enable Zombie Objects на вкладке Diagnostics

xcode 7 zombie flag

В качестве альтернативы, если вы предпочитаете .xcconfig файлы, вы можете прочитать эту статью https://therealbnut.wordpress.com/2012/01/01/setting-xcode-4-0-environment-variables-from-a-script/

1 голос
/ 22 октября 2013

Какао предлагает классную функцию, которая значительно расширяет ваши возможности для отладки таких ситуаций. Это переменная среды, которая называется NSZombieEnabled, посмотрите это видео , объясняющее настройку NSZombieEnabled в target-C

0 голосов
/ 05 июля 2013

В Xcode> 4.3:

Вы щелкаете по раскрывающейся панели схемы -> изменить схему -> вкладку аргументов, а затем добавляете NSZombieEnabled в столбце Переменные среды и YES в столбце значения.

Удачи !!!

...