El *_*ato 9 objective-c ios sprite-kit skview skscene
我使用dispatch_once NSObject来创建数据指针.因此,当主视图控制器出现时,所有游戏资产指针都会生成.为了玩游戏,用户在UIViewController上点击对应于特定级别的UIButton.我叫它LevelSelectionController.当游戏结束时,用户将点击标签(SKLabel).并且将删除所有操作和节点.
[self removeAllActions];
[self removeAllChildren];
[self removeFromParent];
Run Code Online (Sandbox Code Playgroud)
此外,特定级别的SKScene子类将用户返回到LevelSelectionController的任务委托给呈现游戏SKView的viewcontroller ,如下所示.
- (void)closeScene {
SKView *spriteView = [[SKView alloc] init];
[spriteView presentScene:nil];
[self.navigationController popViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
我唯一的问题是当用户离开游戏场景(SKScene)时内存仍然很高.游戏需要大量资产.因此,当游戏开始时,内存使用量将跳至200 MB.当用户返回到原始级别选择视图控制器时,根据活动监视器,游戏模拟器仍然消耗200 MB .当用户进入不同级别时,内存使用量将再跳过10 MB.那么一旦用户离开SKScene,我怎样才能释放上一场比赛的内存?
我正在使用ARC.Xcode版本是5.1.开发目标是iOS 7.1.
谢谢您的帮助.
- 编辑1 -
我太愚蠢.我知道问题是什么.当我关闭场景时,我正在创建一个新的SKView,然后我将其设置为nil以获取当前场景.有用.但这不应该是这样做的方式.相反,我需要在呈现之前将当前SKView设置为变量.当我关闭场景时,我需要将该变量设置为nil.嗯......我没在想.
- 编辑2 - 当前场景以零显示时几乎没有变化.从removeFromSuperview中删除它并没有太大作用.
Put NSLog()toSKScene的dealloc方法以确保它正在释放。
此外,在场景的引用计数达到 0 后,资源可能不会立即释放。由于内部优化,资源可能会保留在内存中,直到收到内存警告信号。
| 归档时间: |
|
| 查看次数: |
3327 次 |
| 最近记录: |