Cocos2d-x之Ref、AutoreleasePool、PoolManager

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








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值