在應用程序的開始,我有一個登錄界面,這是LoginViewController
和成功的實例,即在我的用戶成功登錄,正在使用顯示我的應用程序的主要內容將performSegue(withIdentifier identifier: String, sender: Any?)
方法應用於UITabBarController
的實例。遺憾的是,我在LoginViewController
之後沒有撥打deinit()
。這不會發生,因爲我可能在我的LoginViewController
中有任何參考週期,因爲我明確檢查了這些。確保登錄視圖控制器被釋放
由於只有在應用程序啓動時才需要登錄屏幕,我想知道是否有最佳做法能夠確保我的LoginViewController
在segue之後被釋放?
也許使用賽格瑞只是不實現這一目標的正確方法,因爲 據我所知,類似的問題Deinit not called on Show Detail segue的結論是這樣的事實,即使用showDetail-SEGUE是一樣的使用模式介紹,即兩個控制器保持彼此的引用,並且不會在其中任何一箇中調用deinit()
。這是真正的令人欽佩的行爲,還是我錯過了什麼?
更新:我顧不了那麼多的原因,是事實,我使用RxSwift和我LoginViewController
訂閱幾個Observables
,所以我的應用程序離開LoginViewController
後,我要確保設定我收集DisposeBag
爲零。在我的LoginViewController
的ViewDidDisappear()
中做這個嗎?
你可以用全成登錄後更換您的RootViewController的嘗試:(?UIApplication.shared.delegate爲AppDelegate中)? .window?.rootViewController = yourTabBarController –
謝謝,但不幸的是,這並沒有改變任何東西。從ViewController(不是rootViewController)使用segue時會發生同樣的問題。 – Alienbash
你無法解除分配登錄屏幕的原因是因爲你的標籤欄可以被解僱(你可能不希望它發生,但API在那裏)。這裏沒有什麼可以做,在這裏,除了某種容器視圖控制器是與交換的標籤之一,或重寫根登錄控制器的建議 –