Приложение iPhone работает сотни раз, затем вылетает из-за ошибки памяти при запуске, затем никогда не работает до перезагрузки - почему? - PullRequest
0 голосов
/ 01 мая 2010

У меня есть игра Cocos2d / openGL для iPhone. Это универсальное приложение, и я имею дело со случайной, но неприятной ошибкой на iPad.

Мы загружаем много текстур заранее (3 текстуры 2048x2048). Я работаю над уменьшением этой предварительной нагрузки, но меня беспокоит то, что я действительно не понимаю причину этого сбоя, который навсегда разрушает приложение.

Это сделка: 1. Приложение отлично работает на сотни игр на iPad 2. В конце концов (я полагаю, из-за того, что другие программы используют некоторое количество памяти и не отпускают или что-то еще), приложение начинает зависать при запуске. Он просто снова закрывается в середине загрузки. 3. Приложение больше никогда не будет работать на этом iPad, и оно будет закрываться каждый раз, пока iPad не будет перезагружен.

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

РЕДАКТИРОВАТЬ: забыл добавить

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

Incident Identifier: E7A2507C-3FB1-4E3B-B315-09F094236541
CrashReporter Key:   0fda9d667f2c6073f20a76809aa25438b6854d15
OS Version:          iPhone OS 3.2 (7B367)
Date:                2010-04-30 16:59:44 -0400

Free pages:        437
Wired pages:       17228
Purgeable pages:   0
Largest process:   MyAppName

Processes
         Name                 UUID                    Count resident pages
       MyAppName <6307ce41802850944baa78d29224fa7f>   22385 (jettisoned) (active)
    mediaserverd <ea8bac28b06fe3980fdd44b5caceb563>     242
      DTMobileIS <a0f651e43881e66f50f8a95abea72921>    5826
notification_pro <4c9a7ee0a5bbe160465991228f2d2f2e>      67
    syslog_relay <4ceaed776d2df957fa130712f4ef21d0>      66
notification_pro <4c9a7ee0a5bbe160465991228f2d2f2e>      67
notification_pro <4c9a7ee0a5bbe160465991228f2d2f2e>      67
            afcd <4f3c9566e33b4463f05603d990584e5d>      72
            ptpd <83de0f774bd6553d513ae9e19b0f9b56>     181
         syslogd <66247e305d5c0bf6f1ce1cc950653263>      81
             lsd <a4d852c1c8da2b3d231bdc90887b52ba>     130
            iapd <a8534cbde4b90ad5915dd26ab03ff3e3>     204
         notifyd <5e9d5bee7c3eae1c8b494c79eb11406e>      71
        BTServer <64e4a6ea6b1240db2331e05a29caa862>     108
      CommCenter <97bf297944ac4bde19bcee96dd23bd5f>     181
     SpringBoard <c7a5904c12db7b14334a4edaa4cabaa9>    5339 (active)
         configd <aca9fa3380322669164fd6b1a3864300>     373
   fairplayd.K48 <2d997ffca1a568f9c5400ac32d8f0782>      84
       locationd <dd1ea88105c62173908ce767db5c4d37>     599
   mDNSResponder <820560222d47a1f2a0dce98a7f8a9721>     108
       lockdownd <497fd54c79a680bf29f5d9320f514613>     303
MobileStorageMou <c277b79c2157c4dc5cfc5c3ca35bd5f2>      69
         launchd <66972eee4d865c4383b33d985d22994b>      98

**End**

Ответы [ 2 ]

4 голосов
/ 03 мая 2010

Я предполагаю, что на недавно загруженном iPad у вас достаточно свободного ОЗУ для загрузки всех ваших текстур. Затем, в какой-то момент, другие процессы на iPad (например, Mail) начинают потреблять немного больше памяти, поэтому не остаются достаточно для вашего приложения.

Ваш журнал сбоев показывает, что ваше приложение использовало 22385 страниц памяти, что составляет около 87 мегабайт (при условии, что размер страниц одинаков на iPad и iPhone, то есть на iPhone 4k).

Также показано, что SpringBoard использует 5339 страниц памяти, что составляет около 20 мегабайт. Я не знаю об OpenGL, но я слышал, что в Core Animation всякий раз, когда изображения задаются как содержимое CALayer, несжатые данные изображения распределяются в общей памяти, управляемой SpringBoard.

В общем, 87 + 20 мегабайт - это много памяти для устройства с 256 мегабайтами оперативной памяти и без файла подкачки ...

0 голосов
/ 01 мая 2010

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

...