cocos2d-x3.2 內存管理

        圖片緩存沒去掉,這遊戲裏面廣泛的問題。TextureCache::removeUnusedTextures這個方法只有在紋理計數爲1的時候纔會移除內存中緩存的Texture。這裏有一個問題要先說一下:當咱們建立一個精靈的時候,這張精靈所使用的Texture是會加載到內存中緩存着的。一旦你再次建立一個使用相同紋理的精靈,這個時候若是內存中還存在這張紋理的緩存,就會直接取出,而不用從新建立。當一個精靈建立的時候,在其內部調用addImage方法的時候,把引用計數作了+1處理,此時引用計數爲2.當移除這個精靈的時候,引用計數會-1,這個時候引用計數爲1。若此時你調用了TextureCache::removeUnusedTextures的方法。那這張紋理將從內存中移除。可是如果像以前說的,有兩個精靈同時使用了這張問題,那該紋理的引用計數爲3,必須兩個精靈都移除後,才能釋放內存。緩存

        這邊還有一點很重的是:只有在removeChild的時候,引用計數纔會作-1處理,而cocos的removeChild是沒有對其子節點進行remove處理的,也就是說,子節點中對於Texture的引用計數仍在,致使TextureCache::removeUnusedTextures的時候,紋理沒辦法有效的移除。對象


因此這裏建議的方案是:遊戲

1.在移除一個節點以前,先遍歷移除其子節點,釋放引用計數圖片

2.在層或者場景切換的時候,手動調用TextureCache::removeUnusedTextures方法內存

PS:在addChild的時候,會把對象放入容器中,而放入時會對其進行retain()的處理;在removeChild的時候,會把對象從容器中移除,會對其進行release()的處理rem

相關文章
相關標籤/搜索