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()。
在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()。
相关文章推荐
- cocos2d-x的内存管理机制release(),retain(),autorelease()
- Cocos2d-x 内存管理中retain() 、autoRelease()、release()
- Cocos2d-x 内存管理中retain() 、autoRelease()、release()
- cocos2d-x内存管理retain和release
- 内存管理: alloc, retain, release, autorelease, copy, assign
- IOS 学习之 —— 内存管理alloc,assign,retain,copy,release,autorelease
- cocos2d 关于retain、release以及autorelease
- 内存管理1retain和release
- OC语法6——内存管理之引用计数器(retain,release)
- @property后面的retain, assign, copy, autorelease, release作用是什么?
- 【OC学习-11】ARC和内存管理里面的alloc、assign、new、retain、copy、mutableCopy、release说明
- Objective-c 内存管理-MRC retain&release
- 内存管理1retain和release
- 内存管理中的retain和release用法
- 【木头Cocos2d-x 037】retain和release倒底怎么玩?
- cocos2d-x之retain与release
- 【木头Cocos2d-x 037】retain和release倒底怎么玩?
- release, retain, autorelease 与 AT, MT, AMT
- Objective-C 内存管理retain和release
- retain、copy、assign、release、autorelease、nonatomic、atomic