2014-02-18 3 views
1

У меня есть приложение электронной почты ios, и все работает хорошо, за исключением одной информации об учетной записи пользователя. Я получаю сбои, связанные с тем, что выглядит как переопределенный объект.Сбой NSZombies, когда он не включен, работает, когда он включен

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

Итак, мой вопрос: как мне отслеживать это, если включение Zombies не позволяет ему возникнуть? Также, что именно делает Зомби, чтобы предотвратить крушение, он висит на объекте, чтобы контролировать его?

+0

Вы добавили точку останова «Все исключения»? Это может помочь вам в отслеживании сбоя. – rckoenes

ответ

1

Так что мой вопрос в том, как мне отслеживать это, если включение Zombies не позволяет ему возникнуть?

Использовать меньше -autorelease s, если возможно.

Вы можете рассмотреть Malloc Stack Logging, чтобы сузить распределение или колл-сайт.

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

Иногда память Scribbling или Guard Malloc может помочь.

Просто запуск на Sim/Device может вызвать разницу - или даже другую модель устройства.

Удаление других проблем с памятью (например, утечек, циркулярных ссылок) также поможет вам приблизиться к определению этой проблемы.

Вы также можете рассмотреть возможность проверки адреса, если это указатель с тегами.

Даже введение обмена сообщениями в большем количестве мест может помочь сузить область действия. [obj self] будет ошибкой, если obj - зомби.

Также, что именно делает Зомби, чтобы предотвратить крушение, он висит на объекте, чтобы контролировать его?

Да. Объект -dealloc будет вызываться как обычно, но (как правило) память, используемая распределением, не будет возвращена, и экземпляр станет зомби - экземпляр, который создает ошибку времени выполнения, если отправляется сообщение.

Смежные вопросы