您的位置:首页 > 移动开发 > Cocos引擎

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

2014-10-14 22:32 316 查看
首先要知道的:

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

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

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

[cpp] view
plaincopy

testSprite = CCSprite::create("HelloWorld.png");

testSprite->retain();

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

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

[cpp] view
plaincopy

CCSprite* CCSprite::create(const char *pszFileName)

{

CCSprite *pobSprite = new CCSprite();

if (pobSprite && pobSprite->initWithFile(pszFileName))

{

pobSprite->autorelease();

return pobSprite;

}

CC_SAFE_DELETE(pobSprite);

return NULL;

}

注意:

只有在对象没有被人认领的时候才需要使用retain()。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: