Я бачив пропозиції про те, щоб встановити NSZombieEnabled
на true
під час налагодження. Що таке NSZombie? Це рамки? Налаштування?
Я бачив пропозиції про те, щоб встановити NSZombieEnabled
на true
під час налагодження. Що таке NSZombie? Це рамки? Налаштування?
Відповіді:
Це допоміжний засіб для налагодження пам'яті. Зокрема, коли ви встановлюєте, NSZombieEnabled
тоді, коли об’єкт досягає збереження рахунку 0, а не вивільнення, він перетворюється на NSZombie
екземпляр. Всякий раз, коли такий зомбі отримує повідомлення, він реєструє попередження, а не збивається або поводиться непередбачувано. Таким чином, ви можете налагодити тонкі проблеми надмірного випуску / автоматичного випуску без вдосконалених інструментів або копіткої голки під час пошуку копиць сіна.
Назва є досить очевидною грою на тому, що об'єкти, як правило, вважаються "мертвими", коли вони досягають утримують кількість 0. При такому налаштуванні вони продовжують існувати в дивному періоді напіввиведення - ні живих, ні зовсім мертвих. Наче схожі на справжніх зомбі, за винятком того, що вони їдять набагато менше мізків.
Адам чудово пояснив, що таке зомбі, але використання змінної середовища - не найкращий спосіб їх знайти та відстежити.
Набагато кращий підхід до виявлення зомбі - це просто використовувати інструменти - від XCode починайте з "Запустити з інструментом" і виберіть "Розподіл".
Потім зупиніть запис відразу після її запуску, натисніть кнопку «i» на інструменті «Виділення» та увімкніть «Увімкнути підрахунки еталонів» та «Увімкнути виявлення NSZombie». Тепер знову натисніть «Записати» в інструменті, і ваш додаток запуститься - якщо надіслані будь-які зомбі-об’єкти, запис припиниться, а на хронології запису з’явиться діалогове вікно - ви можете натиснути на нього, щоб знайти кожне місце, де був об’єкт утримується або звільняється.
Редагувати: попередня порада стосувалася XCode 3, ось додаток до XCode 4:
У XCode 4.2 є ще простіший механізм використання системи виявлення зомбі - інструменту зомбі. Замість запуску програми використовуйте «Профіль» і вийде інструмент вибору інструментів. Виберіть "Zombie", і додаток почне працювати - зробіть все, що спричинить ваш збій, з'явиться діалогове вікно із повідомленням "Повідомлення зомбі".
Звідти натисніть на стрілку в діалоговому вікні. Це займе перелік усіх часів, коли об’єкт зомбі створювався, зберігався чи випускався. Підніміть бічну панель і ви можете перейти до кожного запису, переглянувши слід стека для коду, який відповідав за кожне коригування у рахунку збереження.
Я погоджуюся з тим, що додав Кендалл, це дуже корисно, але я пропоную все-таки зробити змінну середовища, щоб ви не забували, що вони включені. Подібно до посилання (що втратила чинність) у Cocoa Dev, я поклав це, щоб не пропустити:
if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled")) {
NSLog(@"ZOMBIES/AFOC ARE ENABLED!!! AAAAARRRRRRGH!!! BRAINS!!!");
}
Це дуже приваблює мою увагу.
Допоможе хтось.
Детальний документ про інструменти. https://developer.apple.com/library/watchos/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/index.html#//apple_ref/doc/uid/TP40004652-CH3-SW1