2009-08-05 3 views
0

У меня есть приложение с контроллером tabBar и контроллером navBar. Он имеет ~ 8 просмотров (множество веб-страниц, таблицы, стандарта, почты, адреса и т. Д.), Некоторые из которых создаются с использованием IB, созданного с использованием XCode для создания представлений таблицы. Я запустил тестер утечки памяти, и у него нет утечек памяти. Он может сбой в любое время в любом из представлений. Если я перехожу назад и вперед между представлениями и использую некоторые из функций, которые он закрывает приложение.сбойное приложение отключается

Я предполагаю, что либо я бегу 1) из памяти, либо 2) не высвобождает представления, что заставляет приложение закрываться. Приложение простое, поэтому я не знаю, как я могу быть вне памяти, и я рассмотрел код, насколько это возможно, для правильной доставки объектов.

Так вот мой список вопросов:

1) Что и как использовать некоторые другие инструменты отладки (или скажите мне, что инструменты/файлы я должен искать для использования)? Я хотел бы сузить проблему до ее источника.

2) Какова наилучшая практика для освобождения этих видов? Как?

3) Сколько памяти используют обычные приложения? Есть ли число, в котором я должен остаться? Как проверить, что в симуляторе? инструмент распределения?

Не стесняйтесь указывать мне документы яблока или другие вопросы, связанные с stackoverflow, которые могут мне помочь.

UPDATE: Кажется, что это только сбой, используется один вид, который имеет представление таблицы с пользовательскими ячейками ... Ячейка заполнена из файла plist ... это представление отлично работало несколько дней назад, я замечаю что некоторые ячейки не имеют данных из файла plist ... это может быть проблема с файлом plist, не сохраняя правильные данные. Я продолжу работать над этим.

ОБНОВЛЕНИЕ # 2: Я вернулся к более старым версиям моих файлов, когда этот конкретный tableView работал просто отлично (pre 3.0) и угадал, что он работает просто отлично, я меняю симулятор на 3.0 с помощью этого rev приложения и bam crash на этой таблицеView появляется. Спасибо за помощь до сих пор, я попробую что-то, упомянутое ниже, и сообщит вам, что я нахожу. Если у вас есть некоторые советы о том, почему tableView с пользовательскими ячейками с 2.2.1 до 3.0 начнет сбой, я возьму их. Если я не смогу добраться, я скоро отправлю код. Кстати, я неправильно говорил выше, я думал, что это не сбой в симуляторе ... Я был неправ.

Решение: спасибо за советы по устранению неполадок, исправить было довольно просто, но это странно, что он не сбой в 2.2.1 ... он должен был разбиться много лет назад для проблемы, я выпускал объект один много раз в моей пользовательской ячейке ... duh.

ответ

0

На телефоне первого и второго поколения вы действительно не хотите перебирать около 20 мегабайт реального использования памяти - как только вы справитесь с тем, что вы рискуете быть убитым с помощью трамплина.

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

Самый эффективный способ отслеживания использования реальной памяти, который я нашел до сих пор, - это запуск отладочной сборки на тестовом телефоне и запуск с помощью Activity Monitor. Это даст вам четкое представление о том, сколько памяти берется и удерживается вашим приложением. Как и сколько используется, когда он падает на вас.

Вы можете запустить Монитор активности в Xcode в меню «Выполнить» -> Начать с Performance Tool -> Activity Monitor.

Еще один очень полезный инструмент - это анализатор CLAN Static Analyzer, который вы можете использовать против своей базы кода и может дать очень полезную информацию управления памятью. Как упоминалось, here.

0

Одна вещь, которую я хотел бы попробовать, - это положить некоторые отладочные сообщения в ваш метод (ы) didReceiveMemoryWarning. Таким образом, если у вас заканчивается память, вы, по крайней мере, будете иметь предупреждение.

Смежные вопросы