如何使用swift关闭和解除(游戏)ViewController?

时间:2015-05-01 13:06:50

标签: ios xcode swift sprite-kit segue

我想要实现的目标:从gameVC转向mainmenuVC并摆脱gameVC

当应用程序启动时,它首先会显示一个主菜单viewcontroller,其中包含一个播放按钮,该按钮会切换到gameviewcontroller。当用户点击菜单按钮时,将调用gameviewcontroller中的以下函数并将其转换回主菜单:

        private string postalCode = "";
        public string PostalCode
        {
            get{return postalCode.Substring(0,2) + "-" + PostalCode.Substring(2);}
            set { postalCode = value.Replace("-",""); }
        }

这可能不是它如何正确完成,我认为这可能是问题,但我无法开始工作,因为gameViewController.navigationViewController是零。

这就是我的故事板的样子: storyboard 这是应用程序运行时内存使用情况的样子。每当加载gameviewcontroller时都会出现这些尖峰/步骤。在我看来,问题是,当调用returnToMainMenu()时,gameviewcontroller不会去初始化。

memory usage when app is runnung 此外,这永远不会被执行:

func returnToMainMenu () {

    //This works but does not deinit the vc
    navController?.dismissViewControllerAnimated(true, completion: nil)

    /* this does not do anything:
    navController?.popViewControllerAnimated(true)
    */

}

更新

我删除了这个

 deinit {
    debugPrintln("GameViewController deinitialized")
}

并在returnToMainMenu中定义了navController,如下所示:

navController = self

回到主菜单仍然可以工作,但它仍然没有取消vc

1 个答案:

答案 0 :(得分:3)

当然会记忆泄漏。

override func viewDidLoad() {
    navController = self
}

你刚给自己一个参考。通常当您的vc离开屏幕时,视图层次结构不再保留视图,因此视图会被取消。你设置了一个对自己的引用,所以无论你做什么,它总会把它自己留在记忆中,永远不会消失。