我有一个Cocos2d/openGL iPhone游戏。这是一个通用的应用程序,我正在处理一个偶然的,但令人讨厌的iPad错误。
我们正在加载许多纹理前(32048x2048纹理)。我正在努力减少这个预先的负载,但让我担心的是,我真的不明白这个永久破坏应用程序的崩溃的根本原因。
交易是这样的: 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**发布于 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内存和没有交换文件的设备的大量内存.
发布于 2010-05-01 18:40:31
只需猜测有限的信息,但是您对复制步骤的描述听起来像是在应用程序空间之外分配内存,或者更有可能使用应用程序空间的外部资源,而该资源在应用程序终止时不被释放。这个场景似乎是你应该开始寻找的最可能的地方。尝试减少您的应用程序功能,以使跟踪更容易。
https://stackoverflow.com/questions/2750949
复制相似问题