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)行了填充的封裝