cocos 採用的是引用計數管理,自動釋放
1. new 乙個ref物件,pobj 的引用計數為1
2.呼叫了autorelease 將該物件(pobje)的位址新增到poolmanager::getinstance()->getcurrentpool 中
3.在pool 中使用vector來儲存
4.當director在下一幀處理渲染的時候,先drawscene,然後clear全部的pool中的ref物件
內部的ref物件的引用計數都會自動-1
我們以乙個sprite為例來說明
sprite *psprite = sprite::create(「png file」);
create方法完成兩件事情
1.new sprite
2.將psprite物件放在pool裡面
此時psprite的引用計數為1
3.通常我們會將psprite物件放在乙個父node容器中,加入放在了乙個layer中
最終在node中新增在了_children中,此時psprite的引用計數為2
因為在vector中的pushback中 呼叫了 ref物件的retain方法
4.此時在下一幀的時候,當然先呼叫了drawscene
將該sprite渲染出來,然後呼叫了pool的clear方法,針對乙個單獨的ref來說,也就是呼叫了release方法,此時psprite的引用計數變為1
5.psprite物件已經不存在於pool中了,所以幀迴圈中就不涉及psprite物件的引用計數改變了
6.當psprite的父物件node自我銷毀的時候,執行完畢psprite父物件的release過程後,psprite父物件中的 vector_children; 會自動呼叫clear方法
也就是找到每乙個子物件,然後呼叫其release方法,所以該方法執行到 psprite->release的時候
psprite物件的引用計數變為0 ,所以自己將被delete
對於一幀中區域性需要new ref的物件,並且又希望區域性使用完畢被釋放掉的時候,可以在區域性方法中如下方式:
autoreleasepool ptmppool;
for ...
ref* pnewobj = ...
pnewobj->...
記憶體管理 記憶體管理概述
儲存器的發展方向是高速 大容量和小體積,即儲存器嘗試更高讀寫速度,更大儲存容量,更小物理體積。在計算機中,常見的儲存器有 暫存器,快取,記憶體,硬碟,一般硬碟之類的輔助儲存器又稱外存。在平均讀寫速度上,有 暫存器 快取 記憶體 外存 在單位容量 上,有 外存 記憶體 快取 暫存器 cpu處理器只能直...
《記憶體管理》 記憶體
1.c c 記憶體分布 我們先來看下面的一段 和相關問題 int globalvar 1 static int staticglobalvar 1 void test char char2 abcd char pchar3 abcd int ptr1 int malloc sizeof int 4 ...
關於mysql記憶體管理 MYSQL記憶體管理及優化
mysql記憶體管理及優化 記憶體是影響資料庫效能的主要資源,也是mysql效能優化的乙個重要方面 記憶體優化的原則 將盡量多的記憶體分配給mysql做快取,但是要給作業系統和其他程式的執行預留足夠的記憶體,否則產生swap頁交換,將嚴重影響系統效能 myisam的資料檔案讀取以來作業系統自身的io...