Приложение сбоя NSZombie при включении на iPhone - PullRequest
1 голос
/ 14 июля 2009

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

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

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

Ответы [ 3 ]

3 голосов
/ 15 июля 2009

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

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

3 голосов
/ 14 июля 2009

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

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

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

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

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

1 голос
/ 15 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...