Як налаштувати 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 = ТАК" у розділі "Змінні середовища" вкладки Аргументи.
CMD-<
( CMD-SHIFT-comma
), абоProduct -> Scheme -> Edit SCheme...
Я вважаю цю альтернативу більш зручною:
Profile
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 :
Якщо ви забудете зняти прапорець на вкладці діагностики, об'єкти не будуть звільнені з пам'яті.
Ви отримуєте більш детальний стек, який показує, якими методами ваш корумпований об’єкт був виділений / звільнений або збережений.
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 у стовпці "Змінні середовища" та "ТАК" у стовпці "Значення".
Щасти !!!