Приложение сбоя NSZombie при включении на iPhone

Я добавил NSZombieEnabled в среду моего исполняемого файла, чтобы отследить объект, который я перебрасываю. Теперь я обнаружил, что происходит сбой в части моего приложения, которая никогда не происходила раньше, только при включенном NSZombieEnabled. В тот момент, когда я его отключаю, сбоев не происходит.

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

Кроме того, установка точки останова -[_NSZombie methodSignatureForSelector:] на самом деле не дает мне достаточно сложной трассировки стека, чтобы знать, что происходит.

3 ответа

Решение

Если ваше приложение рушится с помощью NSZombieEnabled, есть большая вероятность, что оно рухнет с отключенным, но не так быстро и не так очевидно.

NSZombieEnabled хранит объекты, которым отправляется сообщение о выпуске. Это может привести к сбою, но не так ли?

Нет, это не приведет к сбою. Что приводит к сбою, так это отправка слишком большого количества сообщений об освобождении объекта. Вот для чего NSZombieEnabled.

Кроме того, установка точки останова -[_NSZombie methodSignatureForSelector:] на самом деле не дает мне достаточно сложной трассировки стека, чтобы знать, что происходит.

Попробуйте использовать предустановку ObjectAlloc в Instruments.

Под NSZombieEnabled объекты не полностью освобождены, они просто становятся зомби. Это означает, что память может накапливаться во время работы, особенно в циклах, где вы можете генерировать набор строк NSS или тому подобное. Ваше приложение может быть убито из-за использования памяти.

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

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

Другие вопросы по тегам