内存优化!

cocos2d 计算图片内存是 width*height*4  
1024*1024*4是 4M 渲染成精灵后,又会占用和纹理一样的内存,所以这种图片占用的总内存是8m
2048*2048*4是16M
用xcode自带的Leaks工具可以很方便的查看程序占用的情况和寻找内存泄露的堆栈
1、对于背景图,因为不需要考虑透明问题。载入材质时可以使用 RGB565 格式(5位红色,6位绿色,5位蓝色),每一个像素消耗的内存是16bit = 2byte。比默认的 RGBA8888 消耗的内存少一半。
2、大尺寸的图可以适当缩小,显示时拉伸放大。比如960x640的图可以缩小为768x512,消耗的内存减少一半。
3、有些sprite不需要那么多的色彩,可以用 RGBA4444 格式载入,一个像素也只消耗2byte,减少一半。可以用 TexturePacker 这样的工具处理原始 32bitpng 图片,生成 RGBA4444 格式的材质文件。
4、多个小图合并到一起,做成 sprite sheet,可以显著降低内存使用,性能也会好一点。
5、超大背景图裁剪成多个小块,需要显示哪个区域才载入对应的块。程序上复杂不少,但总比内存不足崩溃掉好。
6.检查对象有没被释放 
当代码越来越复杂的时候,你就要担心某些对象可能在其他你没注意的地方给保留了引用计数,导致你在对这个对象使用release方法时,实际对象并没有被dealloc掉。所以你得通过在每个对象的dealloc方法中打上断点调试或者输出日志,来确认该对象是否真的被释放了。 
7.使用真机测试 
一般在模拟器中,因为电脑内存本身较大,所以在这种情况下,即使你的程序占用内存很高,也不会收到任何警告和异常。但是如果在iphone或者ipad上进行真机测试,因为设备可用内存较少,所以大多数的内存问题就会暴露出来。所以提早进行真机测试是很有必要的。 
(在真机上,程序运行效率也会大大提升,在模拟器上游戏帧数10帧不到,放到真机上居然是60帧满的,mac mini的性能真是菜啊!) 
8.内存警告。 
当机器内存吃紧的时候,会给程序一个内存警告消息。这个消息分为1和2两种等级,等级1的时候基本上问题不大。等级2的时候就要注意了,通常这时离崩溃不远了(程序内存占用在350M左右一般会收到等级2的警告。)。如果程序的内存占用超过400M,基本上这时程序就会直接被操作系统杀死,表现在ipad上就是程序直接退出。而这时候程序不会打印任何有助于你检查的log

posted @ 2012-09-07 13:35  六界剑仙  阅读(134)  评论(0编辑  收藏  举报