Cocos2d-x版本:cocos2d-2.1rc0-x-2.1.3
windows平台。
在次方法中调用了CCPoolManager::sharedPoolManager()->push(),在栈顶压入一个回收池,这个回收池管理我们所有
windows平台。
VS版本:VS2010.
在Cocos2d-x中还存在一个回收池,通过回收管理CCPoolManager类管理,CCPoolManager类由CCDirector类维
从源代码中可以开出,代码如下:
bool CCDirector::init(void)
{
CCLOG("cocos2d: %s", cocos2dVersion());
// scenes
m_pRunningScene = NULL;
m_pNextScene = NULL;
/*省略很多代码*/
// create autorelease pool
CCPoolManager::sharedPoolManager()->push();
return true;
}
在次方法中调用了CCPoolManager::sharedPoolManager()->push(),在栈顶压入一个回收池,这个回收池管理我们所有
调用autorelease()方法的对象,在每一帧结束后释放此回收池。调用: CCPoolManager::sharedPoolManager()->push();
释放,此方法为自动调用。
在开发中应该尽量避免使用autorelease()方法,过多的是用autorelease()方法方法会引起游戏莫名的崩溃。
相对枯燥的内存操作Cocos为我们准备了一些宏,代码如下:
//使用delete操作符删除一个C++对象p,如果p为NULL,则不做操作
#define CC_SAFE_DELETE(p) do { if(p) { delete (p); (p) = 0; } } while(0)
//使用delete[]操作符删除一个C++数组p,如果p为NULL,则不做操作
#define CC_SAFE_DELETE_ARRAY(p) do { if(p) { delete[] (p); (p) = 0; } } while(0)
//使用free()函数删除p,如果p为NULL,则不进行操作
#define CC_SAFE_FREE(p) do { if(p) { free(p); (p) = 0; } } while(0)
//使用release()放啊释放Cocos2d-x对象p的一次引用,如果p为NULL,则不进行操作
#define CC_SAFE_RELEASE(p) do { if(p) { (p)->release(); } } while(0)
//使用release()方法释放Cocos2d-x对象p的一次引用,再把p赋值为NULL。
//如果p已经为NULL,则不进行操作
#define CC_SAFE_RELEASE_NULL(p) do { if(p) { (p)->release(); (p) = 0; } } while(0)
内存管理总结到此有了一个差不多的认识。
备用,也希望能帮助到大家。