Приложение вылетает при запуске с <256 RAM iOS-устройствами
Я недавно запустил приложение в AppStore. После тысячи раз тестирования на симуляторе, сотни раз на реальных устройствах, мы наконец выпустили наше приложение.
The ProblemОбзоры начали появляться о сбоях приложения, когда пользователь запускает приложение. Мы поняли, чтоapp crashes on launch on iOS devices with less than (or equal to) 256 Mb of RAM, Следующие устройства - это устройства, поддерживаемые нашим приложением менее чем с 256:
iPod Touch 4G iPhone 3GS iPad 1Приложение не всегда дает сбой. Иногда запускается нормально и работает плавно. В других случаях происходит сбой. Время от запуска (когда пользователь нажимает на значок) до сбоя обычно составляет две секунды, что означает, что система не выключает его.
FindingsПри использовании инструментов для тестирования на определенных устройствах, я нахожу следующее:
There are no memory leaks (I'm using ARC), but there are memory warnings Items are being allocated like crazy. There are so many allocated items, and even though I'm using ARC it's as if ARC isn't doing what it's supposed to be doingBecause of what I see as "over-allocation", the result is:
This app takes (on average) 60 MB of Real Memory and 166 MB of Virtual. When the app launches the memory being used quickly increases until it reaches about 60 MB at which point the view has been loaded. Here is a snapshot of the Activity Monitor in Instruments:
Я знаю, что эти цифры достаточно высоки (хотя CPU% там никогда не поднимается). Меня беспокоит, что ARC не работает должным образом, или более вероятный случай: я неправильно распределяю объекты.What could possibly be happening?
The Code and WarningsВ XCode есть только несколько предупреждений, ни одно из которых не относится к запуску приложения или файлам, связанным с запуском приложения. Я установил точки останова как в делегате приложения, так и в моемviewDidLoad
способ проверить и увидеть, произошел ли там сбой - это не так.
Кроме того, Xcode никогда не генерирует никаких ошибок или сообщений в отладчике. В iTunes Connect также нет отчетов о сбоях, просто говорится: «Слишком мало отчетов было отправлено для отображения отчета». Я добавил отчеты о сбоях в свое приложение, но я не выпустил эту версию.
A Few QuestionsЯ начал использовать Obj-C, как только появился ARC, так что я новичок в работе с памятью, распределением и т. Д. (Это, вероятно, очевидно), но мне хотелось бы знать несколько вещей:
Как я могу использовать@autoreleasepool
уменьшить влияние на память? Что мне делать с предупреждениями памяти, что я пишу вdidRecieveMemoryWarning
так как я использую ARC?
Поможет ли удаление операторов NSLog ускорить процесс?
И самый важный вопрос:
Why does my app take up so much memory and how can I reduce my whopping 60 MB footprint?
Я очень признателен за любую помощь! Заранее спасибо!
EDIT: После тестирования на iPhone 4 (A4) мы заметили, что приложение не падает при запуске, тогда как на устройствах с менее чем 256 МБ ОЗУ это происходит.