PoolManager
上一节我们说Cocos2d是一颗大树的话,Ref类就是这棵大树的根,那么为了这颗大树的健康我们需要给它浇水除虫,在程序中,这些繁重的工作都要交给贴身女仆PoolManager去做。
PoolManager是Cocos2d最最要的内存池管理类,它管理着AutoreleasePool内存池,它可以将垃圾资源释放,提高整个程序的性能。
class CC_DLL PoolManager
{
public:
CC_DEPRECATED_ATTRIBUTE static PoolManager* sharedPoolManager() { return getInstance(); }
static PoolManager* getInstance();
CC_DEPRECATED_ATTRIBUTE static void purgePoolManager() { destroyInstance(); }
static void destroyInstance();
AutoreleasePool *getCurrentPool() const;
bool isObjectInPools(Ref* obj) const;
friend class AutoreleasePool;
private:
PoolManager();
~PoolManager();
void push(AutoreleasePool *pool);
void pop();
static PoolManager* s_singleInstance;
std::vector<AutoreleasePool*> _releasePoolStack;
};
看到程序中有pop,push操作我们可以大概看出这是一个栈数据结构。将构造函数和析构函数声明为私有,并且定义了getInstance()函数可以看出这是一个单例函数,也就是说全局只有一个实例对象。
std::vector<AutoreleasePool*> _releasePoolStack
可以看出,内存池是一个AutoreleasePool指针类型的链表,我们可以看看pop,push操作
pop
void PoolManager::pop()
{
CC_ASSERT(!_releasePoolStack.empty());
_releasePoolStack.pop_back();
}
push
void PoolManager::push(AutoreleasePool *pool)
{
_releasePoolStack.push_back(pool);
}
pop,posh操作只是封装了vector函数的pop_back和push_back函数。
PoolManager()
PoolManager::PoolManager()
{
_releasePoolStack.reserve(10);
}
内存池管理类一开始