シングルトンインスタンスではないGameSceneクラスを取得しました。したがって、ユーザーが新しいレベルを選択するたびに割り当てと割り当て解除を行い、「静的」/「共有」データを別のシングルトンクラス(GameManagerなど)に保持します。
ARCを使用しています。私のアプローチがメモリ管理の観点から正しいかどうかを理解したいと思います。つまり、クリーンアップ時に「removeUnusedSpriteFrames」を呼び出すだけで十分ですか?これにより、game-art-forLevelOne-hd.plist内のすべてのスプライトが削除されますか?CCSpriteBatchNodeでも何かを行う必要がありますか?
-(void) loadGameArtFileForLevelOne //I do this in a switch but this is to simplify the reading
{
CCSpriteFrameCache* frameCache = [CCSpriteFrameCache sharedSpriteFrameCache];
[frameCache addSpriteFramesWithFile:@"game-art-forLevelOne-hd.plist"];
CCSpriteBatchNode * sharedSpriteBatchNode = [CCSpriteBatchNode batchNodeWithFile:@"game-art-forLevelOne-hd.png"];
}
//As dealloc is deprecated for ARC code, I prefer to remove unused sprites and texture on cleanup
-(void) cleanup
{
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
}
CCSpriteBatchノードのdeallocメソッドにCCLOG呼び出しを追加しました。GameSceneをロードしてメニューに戻ると、期待どおりに「未使用のテクスチャを削除」のログが表示されますが、CCSpriteFrameCacheのdeallocメソッドのログは表示されません。* !! 警告:以下の編集を参照してください-私の間違い!! *
編集:申し訳ありませんが、CCSpriteBatchのdeallocメソッドのログが表示されないことを意味しました
レベルのスプライトに関連するすべてのメモリを「解放」して削除したいので、これは少し心配です。
これを理解したら、このビットを「最適化」します(たとえば、レベルのクラスごとに1つのスプライトシート(たとえば、ワールド1)と、背景ごとに1つのスプライトシートを用意します)。
なにか提案を?