初窥Cocos2d-x内存管理机制(3)

Cocos2d-x版本:cocos2d-2.1rc0-x-2.1.3
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)




内存管理总结到此有了一个差不多的认识。


备用,也希望能帮助到大家。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值