Избавляемся от авто-релизных пулов - PullRequest
1 голос
/ 13 апреля 2011

У меня есть приложение для iPhone, которое падает без объяснения причин.После прочтения того, что пулы Autorelease не рекомендуется для iOS, я отправился искать их в своем приложении и обнаружил три (включая один в main.m и один в NSThread).

Что именно мне нужно сделать, чтобы удалить их из моего кода?

Спасибо!


РЕДАКТИРОВАТЬ 1

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

Ответы [ 4 ]

5 голосов
/ 13 апреля 2011

Где вы читали, что автозапуск пулов плохо советовали? Я предлагаю вам найти лучшие источники информации.

Конечно, вы не должны использовать автозапуск пулов случайно, и неправильное использование может вызвать проблемы, но определенные ситуации требуют их. Как минимум, тот, который вы нашли в main.m, должен быть там. Как и тот, который вы нашли в вашем NSThread. Маловероятно, что они несут ответственность за ваш сбой, если предположить, что ваш код использует их правильно.

Когда у вас происходит сбой приложения, вы вообще что-то получаете при работе в режиме отладки? Любая трассировка стека в консоли или сообщения журнала, говорящие о предупреждениях памяти? Вылетает ли приложение случайно или только после выполнения определенного действия? Было бы полезно получить дополнительную информацию и / или код.

3 голосов
/ 13 апреля 2011

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

Для решения вашей проблемы

  1. Добавьте операторы NSLog в свой код, чтобы попытаться выяснить, где происходит сбой вашего приложения
  2. Используйте инструменты для обнаружения проблем с памятью и утечек
  3. Возможно, вы перестали выпускать предметы. Вот отличное Руководство по управлению памятью.
0 голосов
/ 13 апреля 2011

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

http://developer.apple.com/library/mac/#documentation/IDEs/Conceptual/Xcode4TransitionGuide/Debugging/Debugging.html

0 голосов
/ 13 апреля 2011

Автоматический выпуск в основной функции и в новой теме требуется согласно документации Apple.потому что при запуске приложения некоторая память резервируется для запуска приложения.и если пул автоматического освобождения, удаленный из основной функции, утечка памяти будет показана симулятором при создании нового потока.

...