學習4 Cocos2D X記憶體管理系統

2021-06-30 16:43:21 字數 1141 閱讀 9225

對cocos2d-x記憶體管理系統的學習主要是從以下三個方面:

1.c/c++記憶體管理機制

2.引用計數機制

3.自動釋放池

c語言中對記憶體的管理是由malloc分配,free來釋放。

c++中對記憶體的管理是有new分配,delete釋放、new/delete。

以誰汙染誰治理的原則。

ps: 函式呼叫結束、物件釋放時先呼叫析構函式,而析構函式中通常負責釋放。 。

由於經常在**中會出現記憶體分配了但是沒有釋放而造成記憶體洩漏的問題,所以,cocos2dx有一套引用計數機制,來幫助管理記憶體。

引用計數機制:在new物件的時候,在物件的建構函式中初始化乙個icount=1來記錄該物件被引用的次數,retain對icount++,release釋放的時候先icount--再判斷icount是否為0,當icount為0的時候才進行安全釋放。

sprite->retain();//count++

sprite->release();//count--

sprite->retaincount();//count

節點樹virtual void addchild(ccnode* child);

virtual void addchild(ccnode* child, int zorder);

virtual void addchild(ccnode* child , int zorder, int tag); //都會呼叫retain()

virtual void removechild(ccnode* child,boolean cleanup);

void removechildbytag(int tag, bool cleanup);

virtual void removeallchildrenwithcleanup(bool cleanup); //呼叫ccarrayremoveallobjects 乙個個的release掉

前面看到,只有當new 或者 malloc的時候我們才要去管記憶體。

可是在應用程式中,我們用到的節點都沒有去new,所以,這裡的全都是由自動釋放池去管理了。

自動釋放池:

ccpollmanager

sprite->autorelease();

更詳細的說明請參考

這裡。

cocos2dx 記憶體管理

記憶體管理中經常遇到的問題 記憶體洩露,記憶體溢位。在cocos2dx中用的是引用計數和自動釋放池的技術,由於熟悉objective c語言,所以對這兩個概念不會很陌生。一 引用計數 引用計數是自動記憶體管理的基礎 在物件裡增加乙個引用計數,當外部引用增加時,計數器加1,當外部引用消失時,計數器減1...

cocos2d x 記憶體管理

呼叫了autorelease的物件,將會在自動 池釋放的時候被釋放一次。因為這個操作發生在 mainloop drawscene 後,這時候遊戲中所有的邏輯已經執行完畢,正是釋放無效資源的最佳時機。所以乙個物件被create後,將被放進pool中,其ref 數為1,當遊戲整個邏輯跑完,如果沒有增加r...

cocos2dx 記憶體管理

我們知道,cocos2dx中使用了引用計數的方式去管理記憶體,不需要我們手動delete的去釋放記憶體。那麼cocos2dx中是怎麼實現引用計數的記憶體管理方式的呢?cocos2dx中的記憶體管理用到了兩個工具 引用計數器 ref 自動 池 autoreleasepool 引用計數器 ref ref...