Cocos2d-x常見(jiàn)問(wèn)題

Cocos2d-x是如何進(jìn)行內(nèi)存管理的?

目前主要有兩種方式實(shí)現(xiàn)智能管理的技術(shù),一種是引用計(jì)數(shù),一種是垃圾回收。而Cocos2d-x采用的就是引用計(jì)數(shù)方式,為此實(shí)現(xiàn)了自己的根類(lèi)(Ref),每一個(gè)對(duì)象都包含了一個(gè)對(duì)生命周期控制的引用計(jì)數(shù)器,構(gòu)造函數(shù)創(chuàng)建時(shí)會(huì)對(duì)該引用計(jì)數(shù)器賦值為1,這代表沒(méi)有實(shí)際引用。當(dāng)要引用對(duì)象時(shí),調(diào)用retain方法,之后引用計(jì)數(shù)加1;當(dāng)引用結(jié)束時(shí),調(diào)用release方法,引用計(jì)數(shù)減1。而autorelease方法會(huì)將對(duì)象放入一個(gè)自動(dòng)釋放池,實(shí)現(xiàn)靈活的垃圾回收。當(dāng)每一幀結(jié)束的時(shí)候,自動(dòng)釋放池的對(duì)象就會(huì)執(zhí)行一次release。Create方法將對(duì)象加入內(nèi)存池之后,對(duì)象的所有權(quán)都屬于內(nèi)存池了,我們返回的指針并沒(méi)有所有權(quán)。而主循環(huán)干了一件非常重要的事情:彈出最上層的自動(dòng)釋放池。之后在release全部此內(nèi)存池中的對(duì)象。就是這樣的原理,我們可以放心的將對(duì)象放入autorelease的池中,在需要的時(shí)候,該對(duì)象就能智能的釋放,同時(shí),在上一級(jí)父節(jié)點(diǎn)通過(guò)addchild向?qū)ο螳@得所有權(quán)之后,就能保證該對(duì)象不會(huì)被刪除。

Cocos2d-x中所使用的設(shè)計(jì)模式

導(dǎo)演類(lèi)或者圖集緩存類(lèi),都使用了單例模式,在全局環(huán)境下,他們都只有一個(gè)實(shí)例。而通知中心,則使用了觀察者模式,如果一個(gè)類(lèi)對(duì)某個(gè)消息感興趣,只需要在通知中心中訂閱即可。而Action則使用了裝飾者模式,某些動(dòng)作之間進(jìn)行了填充的封裝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容