2013年3月10日 星期日

[Cocos2d-x] 關於 CCTextureCache

這個東西是用來管理Texture的快取

最近發現同事常常在使用一張圖片後
馬上就下了 CCTextureCache::shareTextureCache()->removeTextureForKey

感覺起來好像沒有什麼錯,用了一張圖之後就把他從快取移出

但這個部份有個很大的問題
當我們使用 removeTextureForKey的時候他會做兩件事情
第一件是從管理列表中移除這個Texture資料
第二件是"嘗試"移除 Texture

關鍵就在於他去移除 Texture的時候,那個Texture是有人在使用的
所以他不會真的去移除它,但是他卻從我們管理的清單中被移除了
隨然Texture有AutoRelease的機制,但卻無法掌握他什麼時候才會被釋放
也無法掌握現在到底用了多少資源在什麼地方上

結論就是要移除Texture的話,請先移除使用它的物件
然後使用 removeUnuseTexture

ps.  removeUnuseTexture 算是蠻吃資源與時間 請審慎評估使用時機