Подтвердить что ты не робот

Как настроить NSZombieEnabled в Xcode 4?

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

4b9b3361

Ответ 1

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

R

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

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

Click "Enable Zombie Objects"

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

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

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

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

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

Ответ 2

Ответ Jano - самый простой способ найти его. Другой способ: если вы нажмете на панель выпадающего меню схемы → изменить схему → вкладку параметров, а затем добавьте NSZombieEnabled в столбец переменных среды и YES в столбце значений...

Ответ 3

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

  • Нажмите кнопку "Выполнить выпадающую кнопку"
  • Из списка выберите Profile
  • Программа "Инструменты" должна открыться там, где вы также можете выбрать Zombies
  • Теперь вы можете взаимодействовать с вашим приложением и пытаться вызвать ошибку.
  • Как только произойдет ошибка, вы должны получить подсказку, когда ваш объект был выпущен и, следовательно, освобожден.

Zombies

Как только обнаружен зомби, вы получите аккуратный "Zombie Stack", который показывает вам, когда объект был задан, и где он был сохранен или выпущен:

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:

  • Если вы забыли снять флажок на вкладке диагностики, в памяти не будет выделено никаких объектов.

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

Ответ 4

В Xcode 4.2

  • Название проекта/Изменить схему/Диагностика/
  • Включить объекты зомби
  • Вы закончили.

Ответ 6

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

Ответ 7

В Xcode > 4.3:

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

Удачи!!!