現在、フレームキャッシュにスプライトシートを追加するメニューシーンがあります。私は繰り返しメニューシーンから離れて戻ってきます。したがって、メニューシーンがリロードされるたびに、同じスプライトシートがフレームキャッシュに追加されます。これは悪いことですか?古いものは上書き、無視、更新、保持されていますか?同じスプライトシートをフレームキャッシュに何度も読み直すことで、メモリリークが発生したり、メモリが浪費されたりしていませんか?
1 に答える
それは無駄でも有害でもありません。これらすべての背後にある主要なコンポーネントは、CCTextureCacheおよびCCSpriteFrameCacheシングルトンです。どちらも、内部でNSMutableDictionaryを使用しています。テクスチャを「リロード」すると、すでにキャッシュにキー入力されている場合、「追加」アクションは黙って省略され(つまり、テクスチャは再読み込みおよびリロードされません)、呼び出しメソッドは現在のテクスチャから適切なテクスチャを返します。キャッシュ内。
スプライトフレームキャッシュの場合、.plistが読み取られると、スプライトフレームオブジェクトが作成され、plistの各キーに埋め込まれたCCSpriteFrameが設定されます。したがって、リロードすると、以前のすべてのCCSpriteFrameオブジェクトが解放されます(たとえば、それらを参照するCCAnimationを保持している場合など、コード内の別の場所にそれらを保持していないと仮定します)。
あなたが自分自身に関係しなければならない実際の資源は時間と記憶です。メニューを終了するときに、「宛先」がメモリに制約がある場合は、そこに必要なリソースを割り当てる前に、未使用のテクスチャと未使用のスプライトフレームを削除できます。これを行った後、メニューに戻ると、テクスチャが再読み取りされて再ロードされます(CCSpriteFrameの追加の影響はほとんどありません)。これにより許容できないラグが発生するかどうかを自分で判断し、それに基づいて未使用のテクスチャを再追加することを決定する必要があります...ただし、シミュレータではなくデバイスで実行してください。