我有两个UIViewController
。第一个是欢迎屏幕,第二个是登录屏幕(位于导航控制器内部)。用户可以使用后退按钮从登录屏幕返回欢迎屏幕,因此登录屏幕将以self.present(LoginViewController(),animated: false)
打开,登录屏幕之后,最后的UIViewController
将以appDelegate.window?.rootViewController = FinalViewController()
打开。
我的问题是,在这种情况下LoginViewController
或WelcomeViewController
都不会取消初始化。但是,如果我;
FinalViewController
打开WelcomeViewController
(通过更改RootViewController),而不显示LoginViewController
。LoginViewController
而不显示WelcomeViewController
,然后打开FinalViewController
(再次更改RootViewController)控制器已初始化。因此,我认为Viewcontroller中的任何一个都不具有保留周期。
在打开最终控制器后,我想取消登录和欢迎屏幕。
编辑:我发现将其放入NavigationController会阻止反硝化。
EDIT2 :如果我在更改rootViewController之前致电self.dismiss(animated: false, completion: nil)
。所有控制器似乎都已取消初始化,但是我不确定是否会更好。
答案 0 :(得分:1)
为什么不使用此层次结构:
-UIWindow
-----UIWindow.RootViewController
----------UINavigationController
---------------WelcomeScreen
---------------LoginScreen (Push without animation)
登录成功:
-UIWindow
-----UIWindow.RootViewController
----------UINavigationController
---------------FinalViewController
隐藏导航栏,并根据需要使用animated
属性。
编辑
document的一部分:
viewControllerToPresent
用于在当前视图控制器的内容上显示 的视图控制器。
因此,对父控制器的引用可以从所提供的控制器进行访问,因此两个VC可以相互访问。例如self.presentedViewController
。为了删除它,必须关闭控制器。因此,演示者控制器将释放演示者控制器的参考。