加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos2d-x之Ref、AutoreleasePool、PoolManager

发布时间:2020-12-14 19:47:58 所属栏目:百科 来源:网络整理
导读:Ref 、AutoreleasePool、PoolManager这三个类的作用是管理对象。 所在文件: CCRef.h,包含: class CC_DLL Clonable、 class CC_DLL Ref CCAutoreleasePool.h,包含: class CC_DLL AutoreleasePool 、 class CC_DLL PoolManager 重点介绍:Ref、Autoreleas
Ref、AutoreleasePool、PoolManager这三个类的作用是管理对象。
所在文件:
CCRef.h,包含: classCC_DLLClonable、classCC_DLLRef
CCAutoreleasePool.h,包含: classCC_DLLAutoreleasePoolclassCC_DLLPoolManager
重点介绍:Ref、AutoreleasePool、PoolManager三个类。
1、Ref是Director、Node、Action、Even等类的派生类,用于统计Ref派生类被引用的次数,新增的Ref派生对象可以添加到AutoreleasePool中。
2、AutoreleasePool可以保存多个Ref对象,可以对里面的对象进行撤销删除,也可以在调试时查看相关信息。
3、PoolManager类是一个单例,用于管理AutoreleasePool。
·Ref:
unsigned int _referenceCount; //记录Ref对象被引用次数,当创建一个Ref对象时_referenceCount=1
void retain();     //_referenceCount+1
void release();     //delete Ref对象并将_referenceCount-1
Ref* autorelease();     //将Ref对象添加到AutoreleasePool 中
unsigned int getReferenceCount() const;     //返回当前引用数。
protected :  friend class AutoreleasePool ;     //AutoreleasePool友元类
Ref总结:Ref是Cocos2d-x中许多重要类 (Director、Node、Action、Event等) 基类。Ref主要用于记录对象被引用的次数和对Ref对象的撤销。
Ref的派生类: Director、Node、Action、Even等。
更多派生类参考: http://cn.cocos2d-x.org/doc/cocos2d-x-3.0/df/d28/classcocos2d_1_1_ref.html

·AutoreleasePool:
std::vector< Ref*> _managedObjectArray;     //用于保存新增的Ref对象
void addObject(Ref *object);          //添加Ref对象到_managedObjectArray中
void clear();         //遍历_managedObjectArray,调阅Ref对象的release()方法
bool contains(Ref * object) const;    //判断Ref对象是否在_managedObjectArray
void dump();  //debug输出_managedObjectArray的长度,每一个Ref对象被引用次数
AutoreleasePool总结:AutoreleasePool用于管理多个Ref对象,新增Ref对象、清除pool的所有Ref对象或输出Ref 信息。

·PoolManager:
AutoreleasePool对象使用std::vector<AutoreleasePool *> _releasePoolStack;
void PoolManager ::push(AutoreleasePool * pool) //新增
void PoolManager ::pop() //弹出
Manager总结: PoolManager由 单例实现, 用于保存 AutoreleasePool 对象,对 AutoreleasePool 进行管理

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读