Cocos2d-X3.0 ----- 内存管理源码分析
内存管理部分主要依靠三个类 class CC_DLL Ref (Ref类是引用计数类) //引用计数减一,如果引用计数小于1,则delete this void Ref::release() { CCASSERT(_referenceCount > 0, "reference count should greater than 0"); --_referenceCount; if (_referenceCount ==0) { delete this; } } //加载到自动管理池中 Ref* Ref::autorelease() { PoolManager::getInstance()->getCurrentPool()->addObject(this); returnthis; }
class CC_DLL AutoreleasePool AutoreleasePool::AutoreleasePool(): _name("") #if defined(COCOS2D_DEBUG) && (COCOS2D_DEBUG > 0), _isClearing(false) #endif { _managedObjectArray.reserve(150); PoolManager::getInstance()->push(this); }
AutoreleasePool::AutoreleasePool(const std::string &name): _name(name) #if defined(COCOS2D_DEBUG) && (COCOS2D_DEBUG > 0), _isClearing(false) #endif { _managedObjectArray.reserve(150); PoolManager::getInstance()->push(this); } AutoreleasePool::~AutoreleasePool() { CCLOGINFO("deallocing AutoreleasePool: %p",this); clear(); PoolManager::getInstance()->pop(); } //外部的mainLoop大循环中每一帧调用一次clear(); void AutoreleasePool::clear() } //讲对象添加到当前内存自动释放池的容器中 void AutoreleasePool::addObject(Ref* object) class CC_DLL PoolManager (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |