应用程序启动时,我有一个登录屏幕,这是LoginViewController
的一个实例,并且成功后,即在我的用户成功登录后,我的应用程序的主要内容将使用{{1方法到performSegue(withIdentifier identifier: String, sender: Any?)
的实例。不幸的是,我在UITabBarController
之后没有调用deinit()
。这不会发生,因为我LoginViewController
中可能有任何参考周期,因为我明确地检查了那些。
由于只在应用程序启动时需要登录屏幕一次,我想知道是否有最佳做法可以确保我的LoginViewController
在segue之后被解除分配?
使用segue可能不是获得此权利的正确方法,因为
根据我的理解,类似问题Deinit not called on Show Detail segue的结论是这样的事实,即使用showDetail-segue与使用模态表示相同,即两个控制器保持彼此的引用和LoginViewController
将不会在其中任何一个中调用。这是真正受人尊敬的行为,还是我错过了什么?
更新:我非常关心的原因是,我使用RxSwift而我的deinit()
订阅了几个LoginViewController
,所以在我的应用程序离开Observables
后,我我希望确保将收集的LoginViewController
设置为零。在我的DisposeBag
的{{1}}中执行此操作是否有效?
答案 0 :(得分:0)
我建议你创建一个自定义segue类并覆盖执行函数,如下所示:
class CustomSegue: UIStoryboardSegue {
override func perform() {
source.view.window?.rootViewController = destination
}
}