2013-03-04 2 views
1

как говорится в названии. У меня есть приложение, которое работает на iPad 2, но падает на iPad 3. При запуске его консоль дает мне небольшую память предупреждающее сообщение. Когда авария случается я symbolicate, но там действительно ничего, что я могу относиться к коду, как это показываетприложение отлично работает на iPad 2, падает на iPad 3, с предупреждением о низкой памяти

process name, UUID, rpages, recent_max, [reason] (state) 

и под этими заголовками столбцов просто шестнадцатеричное материал, ничего не показывая вызовы методов или строки в проекте.

Любые идеи? я не хватает некоторых флагов в коде, который позволяет улучшить журнал сбоев?

Спасибо.

+0

являются IOS версии на двух устройствах идентичны? Падает ли iPad 3 в одном и том же месте все время или в другом месте? Это для всех iPad 3, или просто для некоторых (или для одного)? Вы освобождаете значительное количество памяти в своих 'didReceiveMemoryWarning'? – Rob

ответ

2

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

Как сказал Даниэль, вы можете посмотреть на Technical Note 2151, но, как он говорит:

Когда вы видите аварии низкой памяти, а не беспокоиться о том, в какой части кода выполнял в момент прекращения , вы должны изучить ваши шаблоны использования памяти и ответы на предупреждения о низкой памяти. Memory Allocations Help перечисляет подробные инструкции о том, как использовать инструмент «Утечки», чтобы обнаружить утечки памяти, и как использовать функцию «Отметка кучи» инструмента «Выделение», чтобы избежать оставленной памяти. Memory Usage Performance Guidelines обсуждает правильные способы реагирования на уведомления с низкой памятью, а также множество советов по эффективному использованию памяти. Также рекомендуется проверить сеанс WWDC 2010, Advanced Memory Analysis with Instruments.

Таким образом, пара мыслей:

  1. Вы смотрели на герметичность? В статье Finding Leaks вы узнаете, как использовать инструменты для поиска утечек.

  2. Если вы включили зомби, выключили ли вы их? Зомби - отличный диагностический инструмент, но он просто потребляет память.

  3. Вы запустить свой код через статический анализатор (сдвиг + команда + B или выберите «Анализ» в меню «Product»)? Особенно, если вы используете не-ARC-код, это может вызвать множество проблем с памятью.

  4. Проанализировали ли вы свои ассигнования на необъяснимые увеличения без компенсирующего уменьшения с помощью инструмента Instrument's Allocations. Используя это, вы можете запустить программу, посмотреть на потребление памяти на графике и посмотреть, видите ли вы какие-либо увеличения, которые не компенсируются в какой-то момент соответствующими сокращениями.И если это так, выделите эти увеличения на графике:

    Например, при запуске инструмента Allocations удерживайте клавишу выбора, а затем щелкните мышью и перетащите мышью, чтобы выделить часть временной шкалы, чтобы определить, что вы хотите проверить. Вероятно, вы захотите сосредоточиться на одном из ваших пиков в распределении. Например, я нашел шишку в моих ассигнованиях и выделил его как таковые (это было смехотворно простым примером, где я создать огромный массив в viewDidLoad, но, надеюсь, это даст вам идею):

    allocations

    Примечания , Я считаю полезным показать дерево вызовов на нижней панели, часто бывает полезно выбрать «Скрыть системные библиотеки», сосредоточиться на вашем коде (и «Инвертировать дерево вызовов»). И если вы дважды щелкните по имени метода в инструменты (в моем примере, здесь было бы viewDidLoad), инструменты, то покажет вам ваш код, который делает распределение:

    show code

+0

Спасибо, это действительно полезно, но почему это произойдет только в iPad 3? у него меньше памяти, чем у iPad 2? – Huang

+0

@Huang Нет, у него больше. Поэтому, если вы получаете предупреждения о памяти, это означает, что у вас есть какое-то вопиющее потребление памяти. Вы можете посмотреть различия в конфигурациях (версии iOS, сетчатка v без сетчатки, wifi v сотовые настройки и т. Д.), Но для предупреждений о низкой памяти я бы сосредоточился на утечке и распределении. Тратить много времени на краш-журнал - это немного похоже на просмотр обломков автомобиля в овраге, где анализ характера скрученного металла, который был вызван ударом, часто не связан с тем, что заставило машину отгонять скалы в первую очередь. – Rob

1

Предупреждения о низкой памяти генерируют другой вид журнала, чем стандартные сбои. Взгляните на раздел «Понимание отчетов о низкой памяти» этой статьи, чтобы понять, что произошло с вашим приложением, и как вы можете отлаживать его с помощью инструментов: http://developer.apple.com/library/ios/#technotes/tn2151/_index.html

+0

спасибо, это ставит меня на правильный путь. – Huang

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