Cocos2d-x 内存管理中retain() 、autoRelease()、release()

首先要知道的:

在Cocos2d-x中,create()会设置为autorelease() ,如果用create()出来的对象没有人认领,即没有被addchild(),那么在每一帧刷新的时候,Cocos2d-x检测到这个对象没人要,就会把他释放,释放之后我们再去用这个对象,就可能会出现崩溃等问题。


那么一个没人要的对象怎么样保持原来的状态而不被自动释放呢?

用retain(),在create()之后,保持这个对象,就不会被自动释放了。

  1. testSprite = CCSprite::create("HelloWorld.png");    
  2. testSprite->retain();   

如果我不用create(),直接new一个出来呢?

那一定要先给这个对象加上 autorelease(),因为retain()、release()都是建立在autorelease()基础之上的。


  1. CCSprite* CCSprite::create(const char *pszFileName)    
  2. {    
  3.     CCSprite *pobSprite = new CCSprite();    
  4.     if (pobSprite && pobSprite->initWithFile(pszFileName))    
  5.     {    
  6.         pobSprite->autorelease();    
  7.         return pobSprite;    
  8.     }    
  9.     CC_SAFE_DELETE(pobSprite);    
  10.     return NULL;    
  11. }   


注意:

只有在对象没有被人认领的时候才需要使用retain()。


(转载自:http://blog.youkuaiyun.com/huutu/article/details/11116789)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值