首页 > 代码库 > 建立自己的回收池

建立自己的回收池

http://blog.csdn.net/haomengzhu/article/details/27693365

引擎维护着一个回收池,所有的 autorelease 对象都添加到了这个池中。

多个自动回收池排列成栈结构,当我们手动创建了回收池后,回收池会压入栈的顶端,autorelease 对象仅添加到顶端的池中。当顶层的回收池被弹出释放时, 它内部所有的对象都会被释放一次, 此后出现的 autorelease 对象则会添加到下一个池中。

 

Cocos2d-x 已经保证每一帧结束后释放一次回收池,并在下一帧开始前创建一个新的回收池,但是我们也应该

考虑到回收池本身维护着一个将要执行释放操作的对象列表,如果在一帧之内生成了大量的 autorelease 对象,将会导致回收池性能下降。

因此,在生成 autorelease 对象密集的区域(通常是循环中)的前后,我们最好可以手动创建并释放一个回收池。

 

//步骤 a
obj1->autorelease();
obj2->autorelease();

//步骤 b
PoolManager::getInstance()->push(this);

//步骤 c
for(int i=0; i<n; i++) {
obj_array[i]->autorelease();
}
//步骤 d
PoolManager::getInstance()->pop();
//步骤 e
obj3->autorelease();

 

技术分享

建立自己的回收池