【问题标题】:iPhone app works hundreds of times, then crashes from memory error on startup, then never works until restart - why?iPhone应用程序运行了数百次,然后在启动时因内存错误而崩溃,然后直到重新启动才运行 - 为什么?
【发布时间】:2010-05-01 17:47:54
【问题描述】:

我有一个 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**

【问题讨论】:

    标签: iphone memory crash cocos2d-iphone textures


    【解决方案1】:

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

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

    另外,它显示 SpringBoard 正在使用 5339 页内存,大约 20 兆。我不了解 OpenGL,但我听说 Core Animation 中,只要将图像设置为 CALayer 的内容,未压缩的图像数据就会分配到 SpringBoard 管理的共享内存中。

    总而言之,87 + 20 megs 对于具有 256 megs RAM 且没有交换文件的设备来说是很大的内存......

    【讨论】:

      【解决方案2】:

      只是对有限信息的猜测,但您对重现步骤的描述听起来像是您在应用程序空间之外分配内存,或者更有可能使用在终止时未释放的应用程序空间之外的资源您的应用程序。这种情况似乎是您应该开始寻找的最有可能的地方。尝试减少您的应用程序功能,以便更轻松地进行跟踪。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-04
        • 1970-01-01
        相关资源
        最近更新 更多