首页 > 代码库 > cocos2dx中的内存管理机制及引用计数

cocos2dx中的内存管理机制及引用计数

1.内存管理的两大策略:

谁申请,谁释放原则(类似于,谁污染了内存,最后由谁来清理内存)--------->适用于过程性函数

引用计数原则(创建时,引用数为1,每引用一次,计数加1,调用结束时,引用计数减1,当引用计数为0时,才会真正释放内存) --------->适用于注册性函数(消息处理,中断等场合)

2.cocos2dx中的内存管理采用引用计数和内存托管的原则

spr->retainCount();//获取对象的引用计数值

spr->retain();//引用计数加1

spr->release();//引用计数减1,还会判断引用计数是否为0,如果为0,则delete对象

spr->autorelease();//内存托管,会调用release,但是要等到本帧结束时才会引用计数减1,俗称延时释放,秋后问斩

3.具体实现原理

引用计数初始化,在创建对象时调用父类的构造器

//CCSpirte 的父类
CCObject::CCObject(void):m_uReference(1) // when the object is created, the reference count of it is 1,构造函数初始化成员列表


引用计数加1

void CCObject::retain(void)
{
  ++m_uReference;
}

引用计数减1

void CCObject::release(void)

{    

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

    --m_uReference;

     if (m_uReference == 0)   

    {        

     delete this;    

    }

}

 

4.内存托管:

CCSprite *spr = new CCSprite;
spr->init();
spr->autorelease(); //延时释放   

/*new,init,autorelease三者结合相当于create*/

 

cocos2dx中的内存管理机制及引用计数