我想要实现的目标:从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是零。
这就是我的故事板的样子: 这是应用程序运行时内存使用情况的样子。每当加载gameviewcontroller时都会出现这些尖峰/步骤。在我看来,问题是,当调用returnToMainMenu()时,gameviewcontroller不会去初始化。
此外,这永远不会被执行:
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
答案 0 :(得分:3)
当然会记忆泄漏。
override func viewDidLoad() {
navController = self
}
你刚给自己一个参考。通常当您的vc离开屏幕时,视图层次结构不再保留视图,因此视图会被取消。你设置了一个对自己的引用,所以无论你做什么,它总会把它自己留在记忆中,永远不会消失。