我的應用程序啓動時使用初始視圖控制器(我們稱之爲StartVC)。現在,當用戶按下繼續按鈕時,我將在StartVC之上呈現一個導航堆棧(可稱爲RegisterVC)。這個導航堆棧將包含5個視圖控制器,每當用戶向前移動按鈕操作時,我都會按下它。在第五個視圖控制器之後,我開始一個新的導航堆棧(我們稱之爲LoginVC)。更改根視圖控制器不會釋放同一個窗口上的先前視圖控制器
現在我的使用情況是我不想讓StartVC & RegisterVC駐留在內存,因爲它們是沒有用的,一旦用戶完成註冊。爲了實現這一點,我改變了AppDelegate中窗口的根視圖控制器LoginVC
下面是我試過的RegisterVC第五視圖控制器上的選項:更改keywindow
1)
UIApplication.shared.keyWindow?.rootViewController = LoginVC
UIApplication.shared.keyWindow?.makeKeyAndVisible()
2)更改窗口
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = LoginVC
appDelegate.window?.makeKeyAndVisible()
3)將前一個根視圖控制器設置爲零,然後分配一個新視圖控制器。
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = nil
appDelegate.window?.rootViewController = LoginVC
appDelegate.window?.makeKeyAndVisible()
4)我也嘗試了直接從AppDelegate的上述選項,而不是從第五個視圖控制器做它。
以上所有的選項,我試着通過在所有視圖控制器上查看deinit進行調試,但是沒有一個被取消分配。另外,我可以在xcode Debug View Hierarchy中看到LoginVC下的第五個視圖控制器。
由於沒有從內存中刪除它們,我面臨的實際問題是在呈現LoginVC之後,我有一個視圖控制器,其背景色alpha更少。正因爲如此,我在其下看到RegisterVC 5th視圖控制器。
對此讚賞的任何幫助...
我建議使用[ 「調試內存圖」](https://stackoverflow.com/questions/30992338/how-to-debug-memory-leaks-when-leaks-instrument-does-not -show-them/30993476#30993476)功能,以查看對這些舊視圖控制器保持強大的參考。 – Rob
你應該在這裏回答:http://stackoverflow.com/a/27153956/849645。如果你的問題與我的問題相同,這就爲我解決了問題。 – CMont