应用程序在具有低内存警告的Retina启用设备中崩溃但在非视网膜设备中工作完美

时间:2012-09-04 08:42:24

标签: iphone xcode cocos2d-iphone

我正在开发一款支持视网膜的cocos2d游戏。我在我的项目中为视网膜和非视网膜添加了大量图像。游戏在模拟器[视网膜和非视网膜]中都能正常工作,并且在非视网膜设备中也能完美运行。但是,当我在视网膜启用设备中运行相同时意味着它会在没有显示任何消息的情况下崩溃。当我用仪器应用程序测试我的游戏意味着它显示低内存警告消息,如[http://screencast.com/t/sfRDTELrhomC]。当应用程序崩溃时在启用视网膜的设备中运行时,它不会在控制台中显示任何错误消息。我对目前的状态感到非常困惑,任何人都可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

您可能正在使用大量内存来加载图像,因此设备内存不足并导致应用程序崩溃。

我猜你正在使用PNG(因为你没有提供任何关于此的信息);当您从PNG,JPG等加载图像时,图像会被加载到内存中两次,因为它必须由cocos“转换”为纹理。此外,此操作的纹理大小必须是2的幂,因此150x150的图像将占用256x256的图像的内存。这是很多浪费的记忆。

我的第一个建议是购买Texture Packer(我与它们无关,它只是一个很棒的软件),它可以拍摄你的图像并将它们制作成压缩的PVR精灵表,其中包含多个图像质地。

PVR文件直接加载到纹理中,因此它们不使用双内存,因为它们是精灵表,所以你的像素浪费较少。

我的第二个建议是,在加载图片时,不要在runloop的相同刻度中完成所有操作; Cocos使用了很多自动释放,并且在刻度结束之前内存不会被清除,因此不是一次性以同一方法将所有图像加载到内存中,而是安排多次调用该方法并每次加载一个新文件