我使用dispatch_once NSObject 创建数据指针。因此,所有游戏 Assets 指针都是在主ViewController出现时制作的。为了玩游戏,用户在 UIViewController 上点击对应于特定级别的 UIButton 。我称它为LevelSelectionController。游戏结束后,用户将点击标签( SKLabel )。并且所有 Action 和节点都将被删除。
[self removeAllActions];
[self removeAllChildren];
[self removeFromParent];
此外,特定级别的 SKScene 子类将将用户返回LevelSelectionController的任务委派给呈现游戏 SKView 的 View Controller ,如下所示。
- (void)closeScene {
SKView *spriteView = [[SKView alloc] init];
[spriteView presentScene:nil];
[self.navigationController popViewControllerAnimated:YES];
}
我唯一的问题是,当用户离开游戏场景(SKScene)时,内存仍然很高。游戏需要大量 Assets 。因此,当游戏开始时,内存使用量将跃升至200 MB。当用户返回到原始级别选择 View Controller 时,根据事件监视器,游戏模拟器仍在消耗200 MB的内存。当用户输入其他级别时,内存使用量将再增加10 MB。那么,一旦用户离开SKScene,我该如何释放上一场比赛的内存呢?
我正在使用ARC。 Xcode版本是5.1。开发目标是iOS 7.1。
感谢您的帮助。
-编辑1-
我很笨。我知道是什么问题。关闭场景时,我正在创建一个新的SKView,然后将其设置为nil以退出当前场景。有用。但这不应该是这样做的方式。相反,我需要在显示它之前将当前的SKView设置为一个变量。当我关闭场景时,我需要将该变量设置为nil。嗯...我没想
-编辑2-
当前场景显示为nil时,变化很小。从removeFromSuperview删除它没有多大作用。
最佳答案
在SO上的一些人已经注意到,当从其父 View 中删除包含的SKView时,将重新分配SKScene。
看一下这些问题及其答案:
Deallocate SKScene after transition to another SKScene in SpriteKit
iOS 7 Sprite Kit freeing up memory
另外,尝试像这样修改closeScene方法:
- (void)closeScene {
SKView *spriteView = (SKView*)self.view;
[spriteView presentScene:nil];
[self.navigationController popViewControllerAnimated:YES];
}
关于ios - 关闭SKScene之后,内存仍然很高,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22704219/