我有一个不是单例实例的 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 - 并且每个背景都有一个精灵表)。
有什么建议吗?