• 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*/

  • 相关阅读:
    iptables和DNS
    centos6.5下载
    linux 系统版本信息
    如何挂载
    Linux网络命令
    端口网络等
    linux安装tomcat
    ip设置
    最全DOS的CMD命令,程序员必会
    c语言文件分割与合并
  • 原文地址:https://www.cnblogs.com/ttss/p/4077633.html
Copyright © 2020-2023  润新知