cocos2d-x3.3Final源代码学习日记-Ref类

                                                                                cocos2d-x3.3Final源代码学习日记

前言:

         2015年了,大三第一个学期正式结束了,按我们学校的归定,再加上自己的选修的课程,或许自己这一生在学校学习的机会也就仅仅剩下一个学期了。所以自己也是很希望能通过最后一个学期的努力,至少可以在实习的时间段找一份像样一点的工作。接触cocos2d-x已经快两年,但是真正决定往游戏开发这个方向走,还是在3.0版本的cocos2d-x发布之后的.原因很简单,在自己学过的这么多门编程语言里,我最偏爱C++.

正式开始学习:

我们查看cocos2d-xAPI文档会发现几乎所有的类都是继承一个叫Ref的类.我喜欢从最根源上面去开始了解一样东西:

  

                   Ref

 

class CC_DLL Ref   
{
public:
    void retain();
    void release();
    Ref* autorelease();
    unsigned int getReferenceCount() const;
protected:
    Ref();
public:
    virtual ~Ref();
protected:
    unsigned int _referenceCount;
    friend class AutoreleasePool;
};

删了一大堆的注释之外,发现其实这个Ref类也是很简单的嘛.按我学习c++的经验来:

一眼看过去发现了一个_referenceCount;这个东西相当熟悉,

C++11里的智能指针就采用了种技术:(引用计数)

随便推测一下,Ref类应该和内存管理有关.

还有一个友元类: AutoreleasePool;

那我们跳转到CCRef.cpp里看一下,(对于学过C++的人来说,分离式编译应该很容易理解)

Ref::Ref(): _referenceCount(1) { }  看来推测没错,每当我们创建一个Ref对象时,与该对象绑定的_referneceCount就设置成1,当他变成0的时候就销毁对象,释放内存.

 

unsigned int Ref::getReferenceCount() const

{

    return _referenceCount;

}

//返回引用计数,

 

void Ref::retain()

{

    CCASSERT(_referenceCount > 0, "reference count should greater than 0");

    ++_referenceCount;

}

//断言宏CCASSERT的作用:

CCASSERT(cond,msg);

如果cond为真,继续后面的代码,如果为假,返回MSG.

Retain函数的作用就是让引用记数+1

 

void Ref::release()

{

    CCASSERT(_referenceCount > 0, "reference count should greater than 0");

    --_referenceCount;

    if (_referenceCount == 0)

    {

        delete this;

    }

}

release函数的作用就是让引用计数-1,并且判断他是否为0,如果为0就删除该对象.

 

//把对象放到对象管理池当中

Ref* Ref::autorelease()

{

    PoolManager::getInstance()->getCurrentPool()->addObject(this);

    return this;

}

很明显的autorelease时应该和AutoreleasePool类,PoolManager类有关系。但是从名字上面看,我们应该可以看出,他是自动管理引用计数的,下次

继续看他是怎么自动管理引用计数.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值