国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

CrossApp內(nèi)存管理

2018-08-27 15:16 更新

CrossApp是用一種引用計數(shù)的方式來管理內(nèi)存對象,通過CAObject、CAAutoreleasePool、CAPoolManager來完成內(nèi)存的管理。

CAObject為引用計數(shù)類,在其構(gòu)造函數(shù)的時候,CAObject的引用計數(shù)為1,但此時并未加入到自動釋放池里,所有自動引用計數(shù)為0
在使用create創(chuàng)建對象時候,會調(diào)用autorelease,將對象放到對象池,CAAutoreleasePool的隊列中接受管理。CAObject調(diào)用retain()則引用計數(shù)會增加1,調(diào)用release()引用計數(shù)會減少1.

CAAutoreleasePool是引擎初始化時創(chuàng)建了一個默認(rèn)的自動釋放對象列表,并把它加入到CAPoolManager里進(jìn)行管理。

引擎每次主循環(huán)都會有一次CAPoolManager中pool的清理,那些引用計數(shù)為0的CAObject都會被釋放掉。這就是CrossApp的內(nèi)

存管理機制。


CAObject

//屬性:
//引用數(shù)量
unsigned int m_uReference;
 
//自動引用數(shù)量
unsigned int m_uAutoReleaseCount;
//方法:
//引用計數(shù)+1
retain();
 
//引用計數(shù)-1
relesase();
 
//添加到自動釋放管理
autorelease();
 
//返回當(dāng)前的引用計數(shù)
retainCount();

同時引擎為了方便內(nèi)存管理,用一些關(guān)于內(nèi)存管理的函數(shù)和宏定義。


常見的函數(shù)
create();內(nèi)包含autorelease()調(diào)用
insertSubview();內(nèi)包含retain()調(diào)用
removeSubview();內(nèi)包含relesase()調(diào)用


常見的宏
#define CC_SAFE_DELETE(p)do { if(p) { delete (p); (p) = 0; } } while(0)
#define CC_SAFE_DELETE_ARRAY(p)do { if(p) { delete[] (p); (p) = 0; } } while(0)
#define CC_SAFE_FREE(p)do { if(p) { free(p); (p) = 0; } } while(0)
#define CC_SAFE_RELEASE(p)do { if(p) { (p)->release(); } } while(0)
#define CC_SAFE_RELEASE_NULL(p)do { if(p) { (p)->release(); (p) = 0; } } while(0)
#define CC_SAFE_RETAIN(p)do { if(p) { (p)->retain(); } } while(0)


還有專門用于適應(yīng)CrossApp的數(shù)據(jù)容器:  CAVector、CAList、CADeque、CAMap 其使用方法類似于c++的vector、list、deque、map的用法,其根本不同在于其添加和移除時,遵循CrossApp的內(nèi)存管理原則。


假如我們有需求,需要我們自己手動管理一個對象指針的內(nèi)存,那么我們需要,retain()和relesase()在一個類中成對出現(xiàn),遵循誰負(fù)責(zé)retain誰就負(fù)責(zé)relesase的原則。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號