Ref、AutoreleasePool、PoolManager这三个类的作用是管理对象。
所在文件:
CCRef.h,包含:
classCC_DLLClonable、classCC_DLLRef
CCAutoreleasePool.h,包含:
classCC_DLLAutoreleasePool、classCC_DLLPoolManager
重点介绍:Ref、AutoreleasePool、PoolManager三个类。
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
进行管理
。