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
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
相关文章推荐
- cocos2d-x内存管理机制------沈大海
- Cocos2d-x 3.1 内存管理机制
- cocos2d-x内存管理机制解析(一)
- cocos2d 内存管理机制详解
- cocos2d-x 内存管理机制
- Cocos2d-x 3.0 内存管理机制
- 寒風的Cocos之旅之C++篇--cocos2d-x内存管理机制
- cocos2d-x autorelease 内存管理机制介绍
- Cocos2d-x 内存管理机制
- cocos2d-x之初试内存管理机制
- cocos2d-x内存管理机制解析(二)
- Cocos2d-x 3.1 内存管理机制
- cocos2d-x内存管理机制解析(一)
- OC和cocos2d-x内存管理机制的简单比喻
- Cocos2d-x 3.0 内存管理机制
- cocos2d-x 内存管理机制
- 我所理解的Cocos2d-x Cocos2d-x 内存管理机制
- 【Cocos2d-x 3.x】内存管理机制与源码分析
- cocos2d-x内存管理机制解析(一)
- cocos2d-x(3.0+)内存管理框架和机制