cocos2dx 内存学习一
发布时间:2020-12-14 16:28:36 所属栏目:百科 来源:网络整理
导读:span style="font-size:18px;"自动释放池:/span span style="font-size:18px;"///cocos2d-x-3.0alpha0cocos2dxcocoa//如果你希望使用自动释放池,那么你就可以参考他了#ifndef __AUTORELEASEPOOL_H__#define __AUTORELEASEPOOL_H__#include "CCObject.h"
<span style="font-size:18px;">自动释放池:</span> <span style="font-size:18px;">///cocos2d-x-3.0alpha0cocos2dxcocoa //如果你希望使用自动释放池,那么你就可以参考他了 #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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |