在上一篇博客:Cocod2dx内存管理(一)--引用计数和Ref类的讲解
(http://blog.csdn.net/gzy252050968/article/details/50459012)
我们知道了Cocos2d-x中使用引用计数进行内存管理,并且Ref类中提供了 retain()、release()、autorelease()方法分,别用于增加计数、减少计数以及将一个对象交给自动释放池对象AutoreleasePool进行管理,由AutoreleasePool对象负责调用release函数,那么,内存管理类PoolManager以及自动释放池AutoreleasePool类具体是怎样进行管理的呢?
我们先来看CCAutoreleasePool类,主要有以下方法:
AutoreleasePool();//构造
AutoreleasePool(const std::string &name);//构造函数的重载
~AutoreleasePool();//析构
void addObject(Ref *object);//将Ref添加到自动释放池
void clear();//清除自动释放池所有对象
bool contains(Ref* object) const;//检测自动释放池中是否有Object对象
void dump();//打印删除的对象的地址
我们来一个一个看:
构造函数:
AutoreleasePool::AutoreleasePool()
: _name("")//设置名字为””
#if defined(COCOS2D_DEBUG) && (COCOS2D_DEBUG > 0)
, _isClearing(false)//设置sClearing为false
#endif
{ //容器扩容,申请保存ref的vector的size增加150
_managedObjectArray.reserve(150);
//把AutoreleasePool添加到管理类生明的vector中
PoolManager::getInstance()->push(this);
}
构造函数中我们可以看到每一个自动释放池AutoreleasePool的对象都有一个管理obj的队列managedObjectArray用于存放池中的obj,并且所有的AutoreleasePool对象都是放在PoolManager的单例对象的一个堆中的,这个一会我们看PoolManager类的代码就可以知道。
析构函数&#x