cocos2d-x3.3Final源代码学习日记-Ref类
来源:互联网 发布:pdf编辑器mac破解版 编辑:程序博客网 时间:2024/06/10 10:26
cocos2d-x3.3Final源代码学习日记
前言:
2015年了,大三第一个学期正式结束了,按我们学校的归定,再加上自己的选修的课程,或许自己这一生在学校学习的机会也就仅仅剩下一个学期了。所以自己也是很希望能通过最后一个学期的努力,至少可以在实习的时间段找一份像样一点的工作。接触cocos2d-x已经快两年,但是真正决定往游戏开发这个方向走,还是在3.0版本的cocos2d-x发布之后的.原因很简单,在自己学过的这么多门编程语言里,我最偏爱C++.
正式开始学习:
我们查看cocos2d-x的API文档会发现几乎所有的类都是继承一个叫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类有关系。但是从名字上面看,我们应该可以看出,他是自动管理引用计数的,下次
继续看他是怎么自动管理引用计数.
- cocos2d-x3.3Final源代码学习日记-Ref类
- [cocos2d-x3.x学习笔记]引用计数 内存管理 Ref AutoreleasePoo PoolManager
- cocos2d-x3.0学习1
- Cocos2d-x3.3Final(3) Button常用成员函数(C++)
- Cocos2d-x3.3Final(1) ListView常用成员函数(C++)
- Cocos2d-x3.3Final(2) Layout常用成员函数(C++)
- Cocos2d-x3.3Final(4) ImageView常用成员函数(C++)
- Cocos2d-x3.3Final(5)LoadingBar常用成员函数(C++)
- Cocos2d-x3.3Final(6)Slider常用成员函数(C++)
- Cocos2d-x3.3Final(7)Focus常用成员函数(C++)
- Cocos2d-x3.3Final(8)PageView常用成员函数(C++)
- Cocos2d-x3.3Final(9)RichText常用成员函数(C++)
- Cocos2d-x3.3Final(10)TextAtlas常用成员函数(C++)
- Cocos2d-x3.3Final(11)TextBMFont常用成员函数(C++)
- Cocos2d-x3.3Final(12)TextField常用成员函数(C++)
- cocos2d-x3.3获取时间
- 【cocos 2d-x】VS2013+cocos2d-x3.3Final+Adriod交叉编译环境配置(超详细版)
- cocos 2d-x】VS2013+cocos2d-x3.3Final+Adriod交叉编译环境配置(超详细版)
- Valgrind for android BuildSell
- PHP核心技术与最佳实践PDF
- CacheConcurrencyStrategy有五种缓存方式
- JAVA系统属性之user.home
- Android4.4(MT8685)源码WIFI--扫描和连接
- cocos2d-x3.3Final源代码学习日记-Ref类
- 关于android 消息轮询处理
- Object C学习笔记21-typedef用法
- android之向Gallery中添加倒影3D效果
- HDU 4135 Co-prime (容斥原理+质因数分解)
- Sigmoid 函数
- Redis学习手册(Key操作命令)
- java中的IO整理
- Mac安装vim7.4