[英]How to both dismiss and deinit a (Game)ViewController using swift?
我想要實現的目標:從gameVC到mainmenuVC,擺脫gameVC
當應用程序啟動時,它首先會顯示一個主菜單viewcontroller,其中包含一個播放按鈕,該按鈕會分段到gameviewcontroller。 當用戶點擊菜單按鈕時,將調用gameviewcontroller中的以下函數並將其切換回主菜單:
func returnToMainMenu () {
//This works but does not deinit the vc
navController?.dismissViewControllerAnimated(true, completion: nil)
/* this does not do anything:
navController?.popViewControllerAnimated(true)
*/
}
這可能不是它如何正確完成,我認為這可能是問題,但我無法開始工作,因為gameViewController.navigationViewController是零。
這就是我的故事板的樣子: 這是應用程序運行時內存使用情況的樣子。 每當加載gameviewcontroller時都會出現這些尖峰/步驟。 在我看來,問題是,當調用returnToMainMenu()時,gameviewcontroller不會去初始化。
此外,這永遠不會執行:
deinit {
debugPrintln("GameViewController deinitialized")
}
更新:
我刪除了這個
navController = self
並在returnToMainMenu中定義了navController,如下所示:
let navController = view.window?.rootViewController as! UINavigationController
segue回到主菜單仍然有效,但它仍然沒有取消vc
當然它會記憶泄漏。
override func viewDidLoad() {
navController = self
}
你剛給自己一個參考。 通常當您的vc離開屏幕時,視圖層次結構不再保留視圖,因此視圖會被取消。 你設置了一個對自己的引用,所以無論你做什么,它總會把它自己留在記憶中,永遠不會消失。
我在觀看了斯坦福iOS8課程的第8講(14:23)后想出來了。
問題是我在我的gamescene中添加了對gameviewcontroller的引用,以從場景調用它的returnToMainMenu()方法。 為了清除其內存,必須將對VC的所有引用設置為nil。
我通過直接從我的場景中引用導航控制器來解決它,如下所示:
(scene!.view!.window?.rootViewController as! UINavigationController).dismissViewControllerAnimated(false, completion: nil)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.