cocos2dx中的記憶體管理機制及引用計數

來源:互聯網
上載者:User

標籤: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中的記憶體管理機制及引用計數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.