cocos2dx 内存学习一

前端之家收集整理的这篇文章主要介绍了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>

猜你在找的Cocos2d-x相关文章