我有一个 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**
<小时/>
最佳答案
我的猜测是,在刚启动的 iPad 上,您恰好有足够的可用 RAM 来加载所有纹理。然后,在某个时间点,iPad 上的其他进程(例如邮件)开始消耗更多内存,因此没有为您的应用程序留下足够的内存。
您的崩溃日志显示您的应用使用了 22385 页内存,约为 87 兆(假设 iPad 和 iPhone 上的页面大小相同,iPhone 上为 4k)。
此外,它还显示 SpringBoard 正在使用 5339 页内存,大约为 20 兆。我不了解 OpenGL,但我听说使用 Core Animation,每当将图像设置为 CALayer 的内容时,未压缩的图像数据就会分配在 SpringBoard 管理的共享内存中。
总而言之,对于具有 256 兆 RAM 且没有交换文件的设备来说,87 + 20 兆内存是很大的内存...
关于iPhone 应用程序运行了数百次,然后在启动时因内存错误而崩溃,然后直到重新启动才运行 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2750949/