在看到另一个UIViewController - Swift之后,SKView继续使用资源

时间:2017-11-09 01:28:30

标签: swift sprite-kit segue instruments skview

我正在构建一个只有3个UIViewControllers,主屏幕,GameViewController和暂停模式的简单游戏。当我在iPhone 6s上从Xcode启动应用程序时,CPU使用率从0%开始。当我转向GameViewController时,CPU使用率会飙升,但当我回到主屏幕时,它将不再是0%,而是将超过10%。如果我继续来回切换,主屏幕上的CPU使用率每次都会增加大约10%。这是我一直用来代码的代码:

func pageSegue(_ currentScreen: String) {

    let newVC: UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: currentScreen) as UIViewController
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    appDelegate.window?.rootViewController = newVC
}

上面的代码找到了它将要转换到的视图控制器的Storyboard标识符(String),然后调用segue。

下面的屏幕截图是在看到GameViewController然后只返回主屏幕一次后,仪器的样子。在执行此操作后,突出显示的行及其上方的百分比继续攀升。

我还尝试将以下代码添加到viewDidDisappear但没有运气:

//gameScene is the SKView
gameScene.scene?.isPaused = true
for child in (gameScene.scene?.children)! {
    child.removeChildren(in: [child])
}
gameScene.presentScene(nil)
gameScene.removeFromSuperview()

这个问题让我觉得我遗漏了一些关于解除分配视图控制器的基本知识。任何帮助表示赞赏。

enter image description here

1 个答案:

答案 0 :(得分:1)

问题是我从模态VC调用pageSegue()。我最初有这个:

@IBAction func goHome(_ sender: Any) {

    pageSegue("HomeScreen") 
}

我改变了这个:

@IBAction func goHome(_ sender: Any) {

    dismiss(animated: false, completion: {
        pageSegue("HomeScreen")
    })
}

现在,每次调用segue并在主屏幕上CPU使用率恢复为0%时,都会释放GameViewController。