cocos2d-x内存管理机制详解

本篇文章纯粹是自己在写木头的卡牌塔防的时候遇到问题的时候,才萌发心思了解关于cocos2d-x的内存管理机制;


       1.首先要想让对象参与内存管理机制,必须要继承Ref类(Node,Layer,等都继承了该类);

       2.调用对象的autoRelease函数,对象就会被cocos2d-x内存管理机制给盯上,并且是在游戏的每一帧都被盯上,没人认领则将其杀死;

       3.如果不想其被杀死,则就要调用retain函数,这样就被认领了,这样就永远不会被杀死,问题来了如果永远不被杀死,则就要造成了内存泄露,则需要调用release函数

       4.addChild函数会调用retain函数。


问题来了:

    什么时候调用retain函数?什么时候调用release函数?

    解释:

     当你把一个对象作为成员变量时,并且没有把对象的addChild到另外一个对象中,就需要调用retain函数。

  切记,必须调用了该对象的autoRelease函数之后,才可以使用release和retain;


关于内存管理总结起来有4 个原则。
       1.‰‰谁创建,谁释放。使用 new 构造出来的函数引用计数为 1,需要调用 release 或者delete 释放,Cocos2D-X 中封装的create 函数中的步骤是先调用new 构造出来一个对象,因为要符合“谁创建,谁释放”的原则,而create 函数需要返回这个对象,不能 自己释放自己创建的对象,所以要调用autorelease 将对象放入自动释放池。也就是说create 出来的对象,如果不调用retain 函数,那么下一帧(再次调用update 时)这个对象已经被自动释放。
‰‰       2. 谁需要保留谁释放。当一个对象被其他指针需要的时候该指针进行保留操作(retain),当不需要时进行release 释放。需要注意的是,addChild 中已经调用了retain 函数,所以创建的Node 节点,不需要retain,直接传递给addChild 被加在父节点上就可以保留了。
‰‰       3.传递赋值时,需要先 retain 形参,后 release 原指针,最后赋值。
‰‰       4.自动释放池 PoolManager。将对象置于自动释放池中,每帧绘制结束,就自动释放池中的对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值