標籤:os sp bs ef new as 管理 nbsp 對象
1.記憶體管理的兩大策略:
誰申請,誰釋放原則(類似於,誰汙染了記憶體,最後由誰來清理記憶體)--------->適用於過程性函數
引用計數原則(建立時,引用數為1,每引用一次,計數加1,調用結束時,引用計數減1,當引用計數為0時,才會真正釋放記憶體) --------->適用於註冊性函數(訊息處理,中斷等場合)
2.cocos2dx中的記憶體管理採用引用計數和記憶體託管的原則
spr->retainCount();//擷取對象的引用計數值
spr->retain();//引用計數加1
spr->release();//引用計數減1,還會判斷引用計數是否為0,如果為0,則delete對象
spr->autorelease();//記憶體託管,會調用release,但是要等到本幀結束時才會引用計數減1,俗稱延時釋放,秋後問斬
3.具體實現原理
引用計數初始化,在建立對象時調用父類的構造器
//CCSpirte 的父類
CCObject::CCObject(void):m_uReference(1) // when the object is created, the reference count of it is 1,建構函式初始化成員列表
引用計數加1
void CCObject::retain(void)
{
++m_uReference;
}
引用計數減1
void CCObject::release(void)
{
CCAssert(m_uReference > 0, "reference count should greater than 0");
--m_uReference;
if (m_uReference == 0)
{
delete this;
}
}
4.記憶體託管:
CCSprite *spr = new CCSprite;
spr->init();
spr->autorelease(); //延時釋放
/*new,init,autorelease三者結合相當於create*/
cocos2dx中的記憶體管理機制及引用計數