gpt4 book ai didi

ios - 关闭 SKScene 后,内存仍然很高

转载 作者:可可西里 更新时间:2023-11-01 02:58:51 26 4
gpt4 key购买 nike

我使用 dispatch_once NSObject 来创建数据指针。因此,所有游戏 Assets 指针都是在主视图 Controller 出现时创建的。为了玩游戏,用户在 UIViewController 上点击对应于特定级别的 UIButton。让我称之为 LevelSelectionController。游戏结束时,用户将点击一个标签 (SKLabel)。并且所有操作和节点都将被删除。

[self removeAllActions];
[self removeAllChildren];
[self removeFromParent];

此外,特定级别的 SKScene 子类将用户返回到 LevelSelectionController 的任务委托(delegate)给呈现游戏 SKView 的 View Controller ,如下所示。

- (void)closeScene {
SKView *spriteView = [[SKView alloc] init];
[spriteView presentScene:nil];
[self.navigationController popViewControllerAnimated:YES];
}

我遇到的唯一问题是当用户离开游戏场景 (SKScene) 时内存仍然很高。游戏需要大量 Assets 。所以当游戏开始时,内存使用量会跳到 200 MB。当用户返回原来的关卡选择 View Controller 时,根据Activity Monitor,游戏模拟器仍在消耗 200 MB。当用户进入不同的级别时,内存使用量将再增加 10 MB。那么,一旦用户离开 SKScene,我该如何释放上一局游戏的内存呢?

我正在使用 ARC。 Xcode 版本是 5.1。开发目标是 iOS 7.1。

感谢您的帮助。

-- 编辑 1 --

我傻了。我知道问题出在哪里。当我关闭场景时,我正在创建一个新的 SKView,然后将其设置为 nil 以退出当前场景。有用。但这不应该是这样做的方式。相反,我需要在呈现之前将当前 SKView 设置为一个变量。当我关闭场景时,我需要将该变量设置为 nil。嗯……我没想到。

-- 编辑 2 --当当前场景显示为 nil 时几乎没有变化。从 removeFromSuperview 中删除它并没有太大作用。

最佳答案

SO 上的一些人注意到,当包含的 SKView 从它的父 View 中删除时,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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com