Приложение iOS вылетает из-за «сообщения, отправленного на освобожденный экземпляр» - PullRequest
2 голосов
/ 18 апреля 2011

Мое приложение для iOS имеет множество сетевых функций. Я, конечно, сохраняю важные данные в файловой системе для просмотра в автономном режиме и так далее, и она использует для идеальной работы без проблем. Теперь, когда я пытаюсь проверить это при включенном режиме полета, чтобы не имитировать интернет-соединение, GDB выдает следующее:

2011-04-17 21:34:13.291 Bronto Backup Mobile App[195:307] *** -[UIAlertView release]: message sent to deallocated instance 0x3e93630

Я попытался отладить malloc в gdb, но он говорит мне, что процесс не запущен или команда не найдена. Как мне выяснить, где произошла ошибка? backtrace не дал мне ничего, кроме обычного NSAutoreleasePoolPop.

Ради любви ко мне, я просто не могу отследить, где эта ошибка. NSZombiesEnabled сообщает мне адрес, но malloc_history pid 0x3e93630 просто выдает ошибку, говоря, что gdb не знает эту команду, даже с информацией впереди.

Ответы [ 2 ]

6 голосов
/ 18 апреля 2011

Что-то недооценено или переизданоЗапустите ваше приложение в инструментах, используя шаблон Zombies.Это покажет вам, у какого объекта была проблема с памятью, и позволит вам увидеть всю историю сохранения / выпуска этого объекта.Это должно указать вам правильное направление.

1 голос
/ 08 октября 2013

BJ Homer ответ правильный, пожалуйста, не голосуйте за мой ответ. Вот некоторая дополнительная информация, которую я разместил:

https://stackoverflow.com/a/19237139/539149

У меня было место, где говорилось:

[viewController release];
viewController = NULL;

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

...