內存計數機制

爲什麼要有內存計數機制:

在C/C++中,內存對於開發人員是開放的我們可以隨意操作,這就意味着我們能用C/C++寫出很強大的工程,所有事物永遠都是一把雙刃劍,有利就會有弊端。雖說我們可以隨意操作內存,

但是內存的管理給我們增加了不少負擔。

在這個領域裏我們就比C#以及java多了一個課題,它就是我們怎麼更好的使用內存,更合理的釋放內存,方法有很多種,其中就有今天要討論的計數機制。

今天我們就看看cocos2d-x是如何做這些事情的吧!

首先要明白我們用cocos2d-x是用來創造遊戲的,那麼很多情況我們不能用了資源就立即釋放。

如:

我們創建一個Scene,然後我們在這個Scene添加一個精靈,添加精力就得使用new關鍵字,這個時候我們通過cocos2d-x源碼可以得出(這種按F12的事情我這裏就不再重複了),此時內存計數是1。

我們有了精靈那麼我就得把他添加到當前節點也就是當前的Scene上,通過cocos2d-x源碼我們繼續可以知道此時計數就是2,這裏爲什麼要加1我們稍後再說。

在cocos2d-x中我用了就要釋放,這個時候我們就應該調用release,查看源碼這個時候計數器變爲1.

從上面過程我們知道最後我們釋放了計數器是1,但是cocos2d-x中計數器要變爲0的時候才能釋放。怎麼回事呢?

我們把話題方到剛纔說過,我們創建的遊戲,如果場景還在界面上,就意味着我們要不停的繪製,如果釋放了那還得了。這裏不讓計數器變爲0就是這個原因。

那麼什麼時候我們可以釋放掉內存,其實這個是cocos2d-x應該做的事情,我們在編碼中必須保證該場景退出後內存計數器爲1就行了。噹噹前場景結束掉後,cocos2d-x會釋放掉父容器,

這個過程我們通過源碼可以看到它會去遍歷父容器裏面所有的子節點,如果計數器大於0的它都會釋放一次。注意是釋放一次。也就是說在場景退出後我們計數器如果大於1那麼就會有內存泄漏。

這個後果大家都知道。所以我們必須在用了後release掉。

 

歡迎討論和提意見

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章