cocos2d-x 内存管理



调用了autorelease的对象,将会在自动回收池释放的时候被释放一次。 因为这个操作发生在mainLoop drawScene()后,这时候游戏中所有的逻辑已经执行完毕,正是释放无效资源的最佳时机。
 
所以一个对象被create后, 将被放进pool中,其ref 数为1, 当游戏整个逻辑跑完,如果没有增加retain操作,注意retain有很多地方可以调用,比如addChild 等,那么pop操作,将会使得它的ref 数变为0, 从而触发delete 销毁操作。
由于这个原因,autorelease 可以保证对象在当前帧结束前不会被销毁。 而release操作则是立即执行的。 
CCObject* factoryMethod() 
{
   CCObject* ret = new CCObject();
   // 在这里对ret对象进行必要的初始化操作
   return ret; 
}
这里的原因在于对ret的引用在函数返回前已经结束,所以必须添加ret->autorelease(); 将引用保存在一个pool中,这样可以保证在自动回收池释放前不会被真正释放掉的。 因为池中保存了一个有效的引用。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值