cocos2d x學習之自動記憶體管理和常見巨集

2021-06-08 14:05:15 字數 1814 閱讀 6949

1.自動記憶體管理

1)概述

c++語言預設是沒有提供自動記憶體管理的。使用者需要自己分配,自己釋放。在cocos2d-x裡提供了乙個自動記憶體管理的方案。主要是通過ccobject來提供的,使用者只要繼承了ccobject,就可以通過呼叫autorelease()來告訴系統進行自動記憶體管理。

一般用法就是: 

cclayer* player = createlayer(s_nactionidx); 

player->autorelease();

2)自動記憶體管理的實現

自動記憶體管理的實現原理大概是:使用者設定自動釋放功能時,記憶體管理(ccpoolmanager)會自動把這個ccobject物件加入其管理池中。等到一定時機(場景銷毀,一幀渲染結束,程式退出等),記憶體管理會遍歷其所管理的每乙個物件,逐個呼叫ccobject的釋放函式進行釋放。ccobject自己內部設定乙個引用係數,增加乙個使用就係數加一,釋放就係數減一,當係數為0時,才真正進行釋放。

如果研究下ccpoolmanager,會發現進行真正記憶體管理的是自動釋放池(ccautoreleasepool),ccpoolmanager下面包含有多個ccautoreleasepool。ccautoreleasepool提供了addobject,removeobject,clear功能。我開始很疑惑,因為進行記憶體釋放管理,乙個ccautoreleasepool就夠了。後來仔細考慮,發現了這個的秘密所在:

ccpoolmanager管理多個ccautoreleasepool,是為了方便確定哪個自動釋放池(ccautoreleasepool)可以進行釋放,而不用影響到其他的自動釋放池。比如在關卡切換時,上乙個關卡的自動釋放池的資料就可以進行自動釋放了,而新關卡的自動釋放池不變~~ 好想法!

2.常見巨集

1)ns_cc_begin cocos2d命名空間開始

2) ns_cc_end  cocos2d命名空間結束

3)using_ns_cc 宣告cocos2d命名空間

4)cc_synthesize_readonly(vartype, varname, funname)宣告乙個成員變數以及getfunname函式,沒有set函式。getfunname已經實現,其實現就是返回這個值。

5)cc_synthesize_readonly_pass_by_ref(vartype, varname, funname) 類似cc_synthesize_readonly,不過getfunname返回的是引用。

6)cc_synthesize(vartype, varname, funname) 宣告乙個成員變數以及getfunname,setfunname函式.函式宣告和實現都有

7)cc_synthesize_pass_by_ref(vartype, varname, funname) 類似cc_synthesize,不過getfunname返回的是引用。

8)cc_property_readonly(vartype, varname, funname) 宣告乙個成員變數以及getfunname函式,沒有set函式。getfunname函式的實現要自己做

9)cc_property_readonly_pass_by_ref(vartype, varname, funname) 類似cc_property_readonly,不過getfunname返回的是引用。getfunname函式的實現要自己

10)cc_property(vartype, varname, funname) 宣告乙個成員變數以及getfunname,setfunname函式.函式實現要自己做

11)cc_property_pass_by_ref(vartype, varname, funname) 類似cc_property,,不過getfunname返回的是引用

cocos2d x學習之自動記憶體管理和常見巨集

1.自動記憶體管理 1 概述 c 語言預設是沒有提供自動記憶體管理的。使用者需要自己分配,自己釋放。在cocos2d x裡提供了乙個自動記憶體管理的方案。主要是通過ccobject來提供的,使用者只要繼承了ccobject,就可以通過呼叫autorelease 來告訴系統進行自動記憶體管理。一般用法...

cocos2d x記憶體優化

程式包的 體積 優化方法 首先 你需要很清楚當前自己專案什麼地方佔的體積最多,例如動畫序列多少mb 地圖佔多少mb等等,都要提前做乙個check 別總是認為 可能佔的多,要詳細的知道才行!1.採用工具對資源進行 打包 例如texturepacker 等工具。2.採用png壓縮工具等,在打包前對每張進...

cocos2dx 記憶體管理

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