IOS 内存优化和调试技巧(基于cocos2d游戏)(3)

来源:未知 责任编辑:责任编辑 发表时间:2014-01-06 18:19 点击:

CCSpriteFrameCache与 CCTextureCache 释放的方法差不多。

值得注意的是释放的时机,一般在切换场景的时候释放资源,如果从A场景切换到B场景,调用的函数顺序为B::init()---->A::exit()---->B::onEnter()可如果使用了切换效果,比如CTransitionJumpZoom::transitionWithDuration这样的函数,则函数的调用顺序变为B::init()---->B::onEnter()---->A::exit()而且第二种方式会有一瞬间将两个场景的资源叠加在一起,如果不采取过度,很可能会因为内存吃紧而崩溃。

有时强制释放全部资源时,会使某个正在执行的动画失去引用而弹出异常,可以调用CCActionManager::sharedManager()->removeAllActions();来解决。

五,内存优化

优化的心得就是尽量去拼接图片,使图片边长尽可能的保持2的N次方并且装的很满。但要注意,有逻辑关系的图片尽量打包在一张大图里,另外一点就是打包的时候要考虑到层的分布。因为为了渲染效率可能会用到CCSpriteBatchNode;同一个BatchNode里的图片都是位于一个层级的,因此必须根据各个图片的层级关系,打包到不同的plist里。有时内存和效率不可以兼得,只能尽量平衡了。

六,其他

最后附一个各代IOS设备的内存限制情况

设备                                              建议内存                  最大内存

iPad2/iPhone4s/iphone4                170-180mb                 512mb

iPad/iPod touch3,4/iphone3gs          40-80mb                  256mb

iPod touch1,2/iPhone3g/iPhone1         25mb                    128mb

上述建议内存只是一些人自己测试的结果,可用的RAM不大于最大内存的一半,如果程序超过最大内存的一半,则可能会挂掉。

另外在LEAKS里查看模拟器中和真机总的内存,会有较大出入。在模拟器中的结果与实际更接近一些。

七, 泄漏的情况

我所碰到的主要内存泄露的方式:
1、最常见的就是,申请了引用,然后最后忘记释放。具体么就是,使用OC的 alloc, retain, copy, new, C的malloc, realloc, C++的new等,然后没有对应的release, free, delete。这是单向泄露。
2、retain cycle,对于OC这种使用计数的方式,可能会存在retain cycle。两个条件,一、就是A中retain了B,B又retain了A,各自给对方计数增加,这个环可以变为很多层,就是A->B, B->C, C->D, ....  Z->A,当然假如中间层越多,检测难度就越大。二、计数减少的操作是在dealloc中,而dealloc被调用则需要计数为0。 这两个条件相加,导致计数锁定,内存泄露。

实战演练

如何查找内存泄漏 ?

一:对工具的使用来查找

1、首先使用分析编译,Analyze build,查看归类当中的memory警告。
这个一般能发现局部变量中忘记release,或者被中途打断release的。

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Lexical or Preprocessor Issue 'xxx.h
  • ios学习笔记(二)xcode 4.3.2下实现基本交互
  • ios版本的helloworld
  • iphone(object-c) 内存管理(3) 有效的内存管理 前半部分
  • ios学习笔记(一)xcode 4.3.2下创建第一个ios项目
  • IOS类似iphone通讯录TableView的完整demo【附源码】
  • UITableView一些方法
  • [iPhone中级]iPhone团购信息客户端的开发 (二)
  • iphone(object-c)内存管理(1)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1