前端之家收集整理的这篇文章主要介绍了
cocos2dx 内存学习一,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
<span style="font-size:18px;">自动释放池:</span>
<span style="font-size:18px;">///\cocos2d-x-3.0alpha0\cocos2dx\cocoa
//如果你希望使用自动释放池,那么你就可以参考他了
#ifndef __AUTORELEASEPOOL_H__
#define __AUTORELEASEPOOL_H__
#include "CCObject.h"
#include "CCArray.h"
NS_CC_BEGIN
/**
* @addtogroup base_nodes
* @{
*/
class CC_DLL AutoreleasePool : public Object
{
/**
* 对象池,管理在 array 里面的底层对象
*
* 虽然一旦对象被添加,对象池 Array 都保留该对象,适当的调用 Object::release() 可以确保,对象池里面的引用计数不受影响
* 如果 object 在对象池 array 里,不恰当的 object 释放,可以破坏对象池 array 里正常的 Object::release() 事件
*/
Array *_managedObjectArray;
public:
/**
* @js NA
* @lua NA
*/
AutoreleasePool();
/**
* @js NA
* @lua NA
*/
~AutoreleasePool();
/**
* Add 将给定的对象添加到 pool 里面.
*
* 相同的对象多次添加到相同的对象 pool ,当 对象 pool 被破坏后,每次加入 object 时,object's 都会调用 Object::release()方法
*
* @param object 添加到对象 pool 里面的对象.
* @js NA
* @lua NA
*/
void addObject(Object *object);
/**
*把给定的对象从对象 pool 里面移除
*
* @param object 即将从对象 pool 里面移除的对象.
* @js NA
* @lua NA
*/
void removeObject(Object *object);
/**
* 清除 autorelease pool.
*
*每次对象被添加到对象 pool 里时都会调用 Object::release()
* @js NA
* @lua NA
*/
void clear();
};
class CC_DLL PoolManager
{
Array *_releasePoolStack;
AutoreleasePool *_curReleasePool;
AutoreleasePool *getCurReleasePool();
public:
/**
* @js NA
* @lua NA
*/
static PoolManager* sharedPoolManager();
/**
* @js NA
* @lua NA
*/
static void purgePoolManager();
/**
* @js NA
* @lua NA
*/
PoolManager();
/**
* @js NA
* @lua NA
*/
~PoolManager();
/**
* 清除堆栈里面的所有 AutoreleasePool
* @js NA
* @lua NA
*/
void finalize();
/**
* Push 一个新的 AutoreleasePool 到 pool stack.
* @js NA
* @lua NA
*/
void push();
/**
* 从 pool stack 弹出一个 AutoreleasePool.
*
* 这个方法确保至少有一个 AutoreleasePool 在 stack 上
*
* stack 被破坏时 AutoreleasePool 会弹出
* @js NA
* @lua NA
*/
void pop();
/**
* *从当前的 autorelease 池移除一个给定的对象。
*
* @param object 要删除的对象。
*
* @see AutoreleasePool::removeObject
* @js NA
* @lua NA
*/
void removeObject(Object *object);
/**
* 把一个给定的对象添加到当前autorelease池。
*
* @param object 要添加的对象。
*
* @see AutoreleasePool::addObject
* @js NA
* @lua NA
*/
void addObject(Object *object);
/**
* @js NA
* @lua NA
*/
friend class AutoreleasePool;
};
// end of base_nodes group
/// @}
NS_CC_END
#endif //__AUTORELEASEPOOL_H__
</span>