我有2个VC,LoadViewController和HomeViewController。这是在我的LoadViewController中:
class LoadViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("init")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
self.present(nextViewController, animated: false)
}
deinit {
print("deinit")
}
}
我的HomeViewController中没有代码。我从来没有看过打印“deinit”,我很好奇为什么控制器不会从内存中删除。我只是想显示一个新的viewcontroller,并删除'old'viewcontroller。
答案 0 :(得分:2)
调用viewcontroller中的present将不会取消当前视图控制器,因为当前视图控制器只是成为“呈现”视图控制器。要切换视图控制器,请在您的应用代理中添加以下内容:
func presentHome() {
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
self.window?.rootViewController = nextViewController
self.window?.makeKeyAndVisible()
}
func presentLoad() {
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "LoadViewController") as! LoadViewController
self.window?.rootViewController = nextViewController
self.window?.makeKeyAndVisible()
}
您可以在应用中的任意位置拨打(UIApplication.shared.delegate as! AppDelegate).presentHome()
来展示您的家庭视图控制器。
答案 1 :(得分:1)
您正在使用LoadViewController
以模式方式显示HomeViewController
。两个视图控制器都将保留在内存中,因为LoadViewController
是HomeViewController
的呈现视图控制器。
换句话说,您要在"之上添加新的视图控制器"现有的。
答案 2 :(得分:1)
当您呈现另一个控制器时,HomeViewController
将不会调用其deinit
,因为如果您dismiss
您呈现的另一个控制器并返回此视图控制器,它将保留在内存中。但是,如果您想知道其视图何时消失,则可以实现viewDidDisappear
。