【发布时间】:2012-02-06 17:15:34
【问题描述】:
我认为这是一个内存问题,但我不确定在这里做什么。
我的问题:
我几乎完成了一个使用 cocos2d for iphone 和retina gfx 的游戏,我已经使该应用程序通用,并进行了调整以使其在 iPad 上正常运行,我主要使用 iPad 上的视网膜 spritesheets ,以及一些额外的图像(包含在 -hd spritesheets 中)以覆盖屏幕边缘等。
一切正常,iPad 在游戏中以 60 fps 运行,就像在 iphone4 上一样(我通常在 iphone3g 上获得大约 40-50 fps),但是,偶尔在 5 分钟左右的菜单之间移动后iPad(通常,但并非总是如此,在卸载游戏引擎并返回菜单后),游戏会崩溃。
在调试器中,我收到“收到内存警告”。不久之后(不是立即),当加载新的 spritesheet 或图形时(不是创建 sprite,而是实际将新纹理加载到内存中),应用程序关闭,我在控制台中得到的只是“(gdb)”,没有堆栈跟踪。
我正在努力寻找解决方案,当从我的游戏引擎移动到我的菜单时,我有一个加载屏幕,它主要是使用 1 个全屏图像、一些文本、所有其他纹理、精灵帧和预加载的 soundfx 创建的然后在加载任何新内容之前从内存中清除。
我尝试在仪器中运行带有泄漏和分配的 ipad,但一旦应用加载,仪器每次都会崩溃。
有没有人碰巧知道 ipad 应用程序在关闭之前的最大内存空间是多少(我想我至少会收到 3 个警告,而不是 1 个),这也等于多少 2048 x 2048 张?
编辑:(发现非理性记忆消失的新原因!)
几周后,我偶然发现了 cocos2d 论坛上的这篇帖子。
http://www.cocos2d-iphone.org/forum/topic/31092
iOS5 中的这个 bug 可能是我遇到麻烦的主要原因,在我看来,所有的建议和建议都有助于收紧我的整个应用程序。
【问题讨论】:
-
您是否为可执行文件启用了 NSZombieEnabled ? cocoadev.com/index.pl?NSZombieEnabled
-
崩溃日志没有告诉你什么吗?
-
没有可以依赖的固定内存量,如果您使用的内存超出操作系统可以为您释放的内存量,操作系统会杀死您的应用程序。如果我没记错的话,ipad 的内存只有 iphone4 的一半,而且您使用的是相同的大图像。可能是您泄漏了一些东西。您可以加载许多 2048x2048 纸张而不会出现重大问题
-
我目前关闭了 NSZombieEnabled,游戏不会因为向已释放实例发送消息而崩溃,(我在 ipad、iphone3g 和 iphone4 上检查过)它只会在收到内存警告
-
崩溃日志中没有任何内容,保罗
标签: iphone ios ipad cocos2d-iphone