内存管理

        内存管理是游戏开发中非常重要的内容,游戏的流畅性和响应及时性都和此有关,内存管理不好,游戏性能下降不说,还容易出现异常。
       cocos2dx内存管理模拟oc的引用计数模式。现在内存管理技术主要分为两种:一是引用技术,一是垃圾回收。引用技术原理通过给每个对象维护一个引用计数器,记录该对象被引用的次数。当计数器为0,表示该对象生命周期结束,自动触发对象的回收和释放。每个程序片段还必须负责的维护引用计数,繁琐的管理对象生命周期还必不可少。垃圾回收原理,它会自动跟踪每个对象,以便找到所有对象,回收不需要的引用。垃圾回收器是一个低级别的线程,指不定什么时候回收,不可控。
      cocos2dx采用了引用计数和垃圾回收结合的机制,ccobject每个对象都有一个引用计数器,通过retainCount可以获取数值。构造创建时,引用计数加1,其他地方使用,调用retain方法加1,使用完成调用release方法减1,当引用计数器为0时,就会释放回收此对象。
      对象创建后,调用autorelease方法,会添加到对象管理池PoolManager, CCPoolManager::getInstance()->addObject(this); 由回收池进行管理,PoolManager会在每次循环结束后调用pop()方法,pop()方法里会调用内存池中所有对象的release()方法,当引用计数器为0,对象就被释放回收。
Object *obj = new Object() ;// 计数器为 1
addChild(obj); //计数器为 2
obj->removeFromParent();// 1
只有再调用一次obj->release();方法,对象才能被回收;
现在使用自动管理器就可以解决这个问题
Object *obj = new Object() ;// 计数器为 1
obj->autorelease(); //2
游戏循环结束 //1
obj->removeFromParent();// 0 , 自动被回收

















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值