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中的内存管理机制及引用计数的更多相关文章

  1. Cocos2d-x 3.1 内存管理机制

    Cocos2d-x使用的内存管理方式是引用计数.引用计数是一种非常有效的机制.通过给每个对象维护一个引用计数器,记录该对象当前被引用的次数.当对象添加一次引用时,计数器加1:而对象失去一次引用时.计数 ...

  2. Android中的内存管理机制以及正确的使用方式

    概述 从操作系统的角度来说,内存就是一块数据存储区域,属于可被操作系统调度的资源.现代多任务(进程)的操作系统中,内存管理尤为重要,操作系统需要为每一个进程合理的分配内存资源,所以可以从两方面来理解操 ...

  3. cocos2dx中的内存管理方式

    转载:http://www.cocoachina.com/bbs/read.php?tid=195219 今天看了一下cocos2dx的内存管理机制,有些地方不太好理解搞了挺长的时间,现在感觉自己理解 ...

  4. cocos2d-x 3.0 内存管理机制

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  5. Python中的内存管理机制

    Python是如何进行内存管理的 python引用了一个内存池(memory pool)机制,即pymalloc机制,用于管理对小块内存的申请和释放 1.介绍 python和其他高级语言一样,会进行自 ...

  6. OC基础15:内存管理和自动引用计数

    "OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.什么是ARC? (1).ARC全名为A ...

  7. Linux内存管理 (11)page引用计数

    专题:Linux内存管理专题 关键词:struct page._count._mapcount.PG_locked/PG_referenced/PG_active/PG_dirty等. Linux的内 ...

  8. cocos2d-x之初试内存管理机制

    bool HelloWorld::init() { if ( !Layer::init() ) { return false; } Size visibleSize = Director::getIn ...

  9. 关于python内存管理里的引用计数算法和标记-清楚算法的讨论

    先记录于此,后续有时间再深究吧: 1.https://www.zhihu.com/question/33529443 2.http://patshaughnessy.net/2013/10/30/ge ...

随机推荐

  1. Oracle数据库作业-5 查询

    14.查询所有学生的Sname.Cno和Degree列. select t.sname,c.cno,c.degree from student t inner join score c on t.sn ...

  2. JQuery事件与应用(一)

    来源:http://www.imooc.com/learn/11     jQuery基础课程 一.使用bind()方法绑定元素的事件 功能: 在ready()事件中绑定一个按钮的单击事件,使用bin ...

  3. OpenShare新功能@2014年第三季度

    新功能@2014第三季度 新增"多租户"的支持:巨型企业集团的私有云需要多租户模式,现在OpenShare可以从根本上完美支持 租户之间完全隔离,这是最高安全性 同时每个租户可以使 ...

  4. VS2008简体中文正式版序列号

    VS2008简体中文正式版序列号 1.Visual Studio 2008 Professional Edition:XMQ2Y-4T3V6-XJ48Y-D3K2V-6C4WT 2.Visual St ...

  5. Javascript Event

    事件原理 JS的事件原理,先看一段HTML. <html> <head> <title>Example</title> </head> &l ...

  6. JS学习第二课

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. 9款基于HTML5/SVG/Canvas的折线图表应用

    1.华丽的HTML5图表 可展示实时数据 HTML5在图表应用中也十分广泛,比起以前的网页图表,HTML5图表制作更便捷,功能更强大.这款HTML5图表插件外观十分华丽和专业,在数据展示方面也很有优势 ...

  8. el表达式获取cookie

    ${cookie.name}将获得对应cookie的对象,比如我们用jsp将一段cookie发送给客户端. Cookie cookie = new Cookie("username" ...

  9. 解決 imagick 在 多线程运行时导致CPU暴增到100%的方法

    假如把imagic 安装到 /usr/local/imagemagick 目录 首先用/usr/local/imagemagick/bin/convert -version指令查看一下输出內容是否已经 ...

  10. 配置drbd高可用集群

    前期准备: 同步时间 (两个节点) 节点一(172.16.21.6) [root@stu21 heartbeat2]# ntpdate 172.16.0.1 31 Dec 20:59:25 ntpda ...