什麼時候用removeUnusedSpriteFrames和removeUnusedTextures

在一個使用cocos2d的項目中,當切換關卡或者說切換layer時,經常需要釋放上一個關卡或者layer中使用的圖片資源,這個時候需要用到下面兩個函數:

[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
[CCTextureCache sharedTextureCache] removeUnusedTextures];
注意:一定不要忘了調用CCSpriteFrameCache的removeUnusedSpriteFrames函數,因爲每一個 CCSpriteFrame實例都retain了一個CCTexture實例,如果不調用該函數,被retain的CCTexture實例永遠得不到釋放 (除非強制釋放該CCTexture實例)。還有,函數的調用順序應該時先調用CCSpriteFrameCache的 removeUnusedSpriteFrames函數,再調用CCTextureCache的removeUnusedTextures函數。
 
一般來說,釋放系統資源的簡單方法是在每個CCLayer的dealloc函數中調用上述兩個函數(如果你在第二個CCLayer的初始化方法中調用這兩 個方法是沒法真正釋放所有資源的,因爲replaceScene函數是先初始化第二個scene,再release第一個scene),但是一定記得要在 [super dealloc];函數之後調用,因爲CCNode的dealloc函數纔是最終釋放所有children的地方。
但是,在每個CCLayer的dealloc函數中調用上述兩個函數釋放資源會出現一個問題,即導致某一小段時間內(第二個scene初始化完畢但是第一 個scene還沒被釋放的時間段)內存達到一個峯值,有可能會收到內存警告甚至是程序crash。爲了避免這種情況,最好是在關卡切花或者說切換 layer時,做一個loadingLayer來過渡。
發佈了24 篇原創文章 · 獲贊 5 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章