[当我在研究Cocos-2dx的源码时,我在想什么]-Ref类,一切的起源

  次阅读 作者:智能小宝 来源:互联网 2015-09-27 15:32 我要评论(0)

【名词解释】

引用计数:引用计数是现代内存管理中经常使用到的一个概念,它的基本思想是通过计数方式实现多个不同对象同时引用一个共享对象,具体地讲,当创建一个对象的实例并在堆上分配内存时,对象的引用计数为1,在其他对象中需要持有这个共享对象时,需要把共享对象的引用计数加1,当其他对象不再持有该共享对象时,共享对象的引用计数减1,当共享对象的引用计数变成0时,对象的内存会被立即释放。(部分截取自维基百科)。

比较著名的使用引用计数的有COM和Objective-C,在COM的IUnknow接口中定义了三个函数:QueryInterface,AddRef和Release,它们分别用于获取接口对象、给接口对象增加计数,给接口对象减少计数,当内部计数变为0时,自动销毁接口对象。在Objective-C中,则定义了retain,release和autorelease函数,分别用于增加计数、减少计数以及将一个对象交给自动释放池对象AutoreleasePool进行管理,由AutoreleasePool对象负责调用release函数。【Ref类的实现】

由于Cocos2d-x是在Cocos2d-iPhone的基础上发展而来,所以沿用了很多Objective-C的思想,Ref类的实现就是如此。

Ref类实现了引用计数的功能,它是引擎代码中绝大多数其他类的父类,定义在CCRef.h中,实现在CCRef.cpp中。其实在CCRef.h文件中不止定义了Ref类,还定义了Clonable类、一系列的宏定义和类型定义,不过我们暂且将精力放在Ref类的解读上。Ref类使用私有成员变量_referenceCount保存计数值,并通过retain,release和autorelease函数实现增减计数值。

class CC_DLL Ref

{

public:

/**

* Retains the ownership.

*

* This increases the Ref's reference count.

*

* @see release, autorelease

* @js NA

*/

void retain();

/**

* Releases the ownership immediately.

*

* This decrements the Ref's reference count.

*

* If the reference count reaches 0 after the descrement, this Ref is

* destructed.

*

* @see retain, autorelease

* @js NA

*/

void release();

/**

* Releases the ownership sometime soon automatically.

*

* This descrements the Ref's reference count at the end of current

* autorelease pool block.

*

* If the reference count reaches 0 after the descrement, this Ref is

* destructed.

*

* @returns The Ref itself.

*

* @see AutoreleasePool, retain, release

* @js NA

* @lua NA

*/

Ref* autorelease();

/**

* Returns the Ref's current reference count.

*

* @returns The Ref's reference count.

* @js NA

*/

unsigned int getReferenceCount() const;

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...