Cocos2d-x之Ref、AutoreleasePool、PoolManager

前端之家收集整理的这篇文章主要介绍了Cocos2d-x之Ref、AutoreleasePool、PoolManager前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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等。

·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 进行管理
原文链接:https://www.f2er.com/cocos2dx/345509.html

猜你在找的Cocos2d-x相关文章