NSZombies падает, когда не включен, работает, когда включен

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

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

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


person Jack Freeman    schedule 18.02.2014    source источник
comment
Вы добавили точку останова All Exceptions? Это может помочь вам в отслеживании аварии.   -  person rckoenes    schedule 18.02.2014


Ответы (1)


Итак, мой вопрос: как мне отследить это, если включение зомби предотвращает это?

Используйте меньше -autoreleases, если это возможно.

Вы можете использовать Журналирование стека Malloc, чтобы сузить область распределения или место вызова.

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

Иногда могут помочь Memory Scribbling или Guard Malloc.

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

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

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

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

Кроме того, что именно Зомби делают, чтобы предотвратить крушение, цепляются ли они за объект, чтобы следить за ним?

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

person justin    schedule 18.02.2014