Что такое NSZombie?



Я видел предложения, говорящие установить NSZombieEnabled до true во время отладки. Что такое NSZombie? Это рамки? Установка?

730   4  

4 ответов:

это помощь отладки памяти. В частности, когда вы устанавливаете NSZombieEnabled тогда всякий раз, когда объект достигает сохранить счет 0, а не освобождается он превращается в NSZombie экземпляра. Всякий раз, когда такой зомби получает сообщение, он регистрирует предупреждение, а не сбой или поведение непредсказуемым образом. Таким образом, вы можете отлаживать тонкие более-релиз/проблемы autorelease без дополнительных инструментов или кропотливая иглы в поисках сена.

название довольно очевидная игра о том, что объекты обычно считаются "мертвыми", когда они достигают значения 0. При такой постановке они продолжают существовать в странном полужизни-ни живыми, ни совсем мертвыми. Очень похоже на настоящих зомби, за исключением того, что они едят гораздо меньше мозгов.

Адам проделал большую работу, объясняя, что такое зомби, но использование переменной среды не лучший способ найти и отслеживать их.

гораздо лучший подход к обнаружению зомби-это просто использовать инструменты - от XCode начните с "Run with Instrument "и выберите"распределения".

затем остановите запись сразу после ее начала, нажмите кнопку "i" на инструменте распределения и включите "включить счетчик ссылок" и "включить обнаружение NSZombie". Теперь нажмите Запись снова в инструменте, и ваше приложение запустится - если какие - либо зомби объекты отправляются сообщения запись остановится, и диалоговое окно появится на временной шкале записи-вы можете нажать на это, чтобы найти каждое место объект был сохранен или освобожден.

Edit: предыдущий совет был для XCode 3, вот дополнение для XCode 4:

В XCode 4.2, есть еще более простой механизм для использования обнаружения зомби-инструмент зомби. Вместо "Run", чтобы запустить приложение, используйте" профиль", и появится селектор инструментов. Выберите "зомби", и приложение начнет работать - делайте все, что вызывает ваш сбой, появится диалоговое окно с надписью"Zombie Messaged".

оттуда, нажмите на маленькую стрелку в диалоговом окне. Это приведет к списку всех случаев, когда объект zombie был создан, сохранен или выпущен. Поднимите боковую панель, и вы можете перейти к каждой записи, глядя на трассировку стека для кода, который отвечает за каждая корректировка в счете сохранения.

Я согласен с тем, что добавил Кендалл, это очень полезно, но я предлагаю все еще делать переменную окружения, чтобы вы не забыли, что они включены. Подобно ссылке (теперь истек) в Cocoa Dev, я поставил это, чтобы не пропустить:

if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled")) {
    NSLog(@"ZOMBIES/AFOC ARE ENABLED!!! AAAAARRRRRRGH!!! BRAINS!!!");
} 

это очень хорошо привлекает мое внимание.

Comments

    Ничего не найдено.