首页 > 其他 > 详细

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

时间:2014-11-06 00:26:54      阅读:160      评论:0      收藏:0      [点我收藏+]

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中的内存管理机制及引用计数

原文:http://www.cnblogs.com/ttss/p/4077633.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!