加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 19:05:31 所属栏目:百科 来源:网络整理
导读:首先要知道的: 在Cocos2d-x中,create()会设置为autorelease() ,如果用create()出来的对象没有人认领,即没有被addchild(),那么在每一帧刷新的时候,Cocos2d-x检测到这个对象没人要,就会把他释放,释放之后我们再去用这个对象,就可能会出现崩溃等问题。

首先要知道的:

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


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

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

[cpp] view plain copy
  1. testSprite=CCSprite::create("HelloWorld.png");
  2. testSprite->retain();

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

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

copy

    CCSprite*CCSprite::create(constchar*pszFileName)
  1. {
  2. CCSprite*pobSprite=newCCSprite();
  3. if(pobSprite&&pobSprite->initWithFile(pszFileName))
  4. {
  5. pobSprite->autorelease();
  6. returnpobSprite;
  7. }
  8. CC_SAFE_DELETE(pobSprite);
  9. returnNULL;
  10. }


注意:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读