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

cocos2d-x内存管理机制-沈大海cocos2d-x教程6

2012-11-12 15:36 399 查看
c++内存机制,采用new关键字实例化的对象,必须在不使用的时候手动delete掉,否则new的时候开辟的内存就不能被回收,造成内存泄露

Npc * n1=new Npc();

if(exit=0)

{ delete n1;

}

cocos2d-x 内存管理的方式,cocos2d-x采用引用计数的方式进行内存管理,当一个对象的引用计数为0的时候,就会被引擎自动delete掉

在cocos2d-x中绝大多数类继承CCObject

CCObject::CCObject(void)

{

static unsigned int uObjectCount = 0;

m_uID = ++uObjectCount; // 对象id

m_nLuaID = 0;

m_uReference = 1; //引用计数

m_bManaged = false; //是否自动autorelease

}

void CCObject::release(void) //减少引用

{

CCAssert(m_uReference > 0, "reference count should greater than 0");

--m_uReference;

if (m_uReference == 0)

{

delete this;

}

}

void CCObject::retain(void) //增加引用

{

CCAssert(m_uReference > 0, "reference count should greater than 0");

++m_uReference;

}

//////////////////////////////////////////自动处理

CCObject* CCObject::autorelease(void)

{

CCPoolManager::sharedPoolManager()->addObject(this);

m_bManaged = true;

return this;

}

CCObject::~CCObject(void)

{

if (m_bManaged)

{

CCPoolManager::sharedPoolManager()->removeObject(this);

}

}

//////////////////////////////////////////////////////////////////// 自动释放池的释放是在哪里呢?大家可以研究下源码

在调试过程中可以跟踪对象的

m_uReference = 1; //引用计数

m_bManaged = false; //是否自动autorelease

这2个值来检查内存使用。

法则: 只要retain的放对应相同的release
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: