首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone应用程序工作数百次,然后在启动时因内存错误而崩溃,然后直到重新启动才能工作--为什么?

iPhone应用程序工作数百次,然后在启动时因内存错误而崩溃,然后直到重新启动才能工作--为什么?
EN

Stack Overflow用户
提问于 2010-05-01 17:47:54
回答 2查看 1.1K关注 0票数 0

我有一个Cocos2d/openGL iPhone游戏。这是一个通用的应用程序,我正在处理一个偶然的,但令人讨厌的iPad错误。

我们正在加载许多纹理前(32048x2048纹理)。我正在努力减少这个预先的负载,但让我担心的是,我真的不明白这个永久破坏应用程序的崩溃的根本原因。

交易是这样的: 1.应用程序在iPad 2上的数百次播放中运行良好。最终(我猜是因为其他程序耗尽了一些内存,而不是放手什么的),应用程序在启动时就开始崩溃了。它只是在装载过程中再次关闭。3.应用程序现在将不再在iPad上工作,每次都会立即关闭,直到iPad重新启动。

显然,每次我的应用程序都需要太多的内存才能可靠地工作,我明白了。我不明白的是,为什么当它失败一次时,它就会永远失败,直到iPad重新启动。有人能解释一下这是怎么回事吗?

编辑:忘记添加

组织者崩溃只是说内存不足,每次都是这样(我在下面将我的应用程序名改为MyAppName )。同样,我知道这是低内存,但是为什么它一直保持低内存直到重新启动?:

代码语言:javascript
复制
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**
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-03 19:43:22

我的猜测是,在刚启动的iPad上,恰好有足够的空闲内存来加载所有的纹理。然后,在某个时候,iPad上的其他进程(例如邮件)开始消耗更多的内存,因此没有留给应用程序足够的内存。

您的崩溃日志显示您的应用程序使用了22385页内存,约为87 megs (假设iPad和iPhone的页面大小相同,iPhone为4k )。

此外,它还显示SpringBoard正在使用5339页内存,约为20兆。我不知道OpenGL,但是我听说过,对于核心动画,每当图像被设置为CALayer的内容时,未压缩的图像数据就会分配到由SpringBoard管理的共享内存中。

总之,87 + 20 megs是一个拥有256 megs内存和没有交换文件的设备的大量内存.

票数 4
EN

Stack Overflow用户

发布于 2010-05-01 18:40:31

只需猜测有限的信息,但是您对复制步骤的描述听起来像是在应用程序空间之外分配内存,或者更有可能使用应用程序空间的外部资源,而该资源在应用程序终止时不被释放。这个场景似乎是你应该开始寻找的最可能的地方。尝试减少您的应用程序功能,以使跟踪更容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2750949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档