簡體   English   中英

如何使用swift關閉和解除(游戲)ViewController?

[英]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不會去初始化。

app運行時的內存使用情況 此外,這永遠不會執行:

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM