基本的に、私はチャットルームを制御するUIViewControllerを持っています。 UIViewControllerが何らかの方法でdeinitedになると、現在のユーザーはチャネルを離れる必要があります。View Controllerが登録されたときにネットワークコールを発信するのは安全ですか?
現在、私のコードは次のとおりです。
class ChatViewController: SLKTextViewController {
var channel: TWMChannel? = nil
// A ton of other code...
deinit {
channel!.leaveWithCompletion({
_ in
})
}
私は今までdeinitにNSNotificationCenter.defaultCenter().removeObserver(self)
のようなコードを見てきましたし、私はこれを行うには安全であるかどうかについては、オンラインで何かを発見していません。
本質的に、このビューコントローラはUINavigationControllerスタックの一部であり、ビューコントローラがポップされるたびに(deinitが常に呼び出されると思います)、チャンネルを離れるようにします。これを行うための好ましい方法がナビゲーションバーの左上のバックボタンとパンニングジェスチャーを処理する場合は、実装を見てみたいと思います。
Rob、** 1)** 'viewController'はいつ破壊されますか? ** 2)**これは、 'viewDidLoad'が次回(破壊後)にロードされることを意味しますか? ** 3)**一般的にviewDidLoadは2回呼び出されますか? – Honey
強い参照がない場合、View Controllerは破棄されます。それは多くのことに依存します。あなたは一般的にそれに頼るべきではありません。はい。viewDidLoadは、ビューをリロードするため、再度呼び出されます。ビューを構成するだけで、viewDidLoadに頼るべきではありません。オフスクリーンのときにビューコントローラが存在するとは決して考えないでください。オフスクリーンのときにView Controller *がもう存在しないと仮定しないでください。ビューを管理するビューコントローラは存在し、それ以外のものはありません。 –
viewWillDisappearの問題は、ホームボタンを押しただけでも呼び出されますが、誰かがアプリケーションを開くたびに離席したり再結合したくないということです。私はビューコントローラがポップされるたびに離れることを望みます。理想的には、アプリが終了するたびに残したいと思っていますが、それは実際には実現可能ではないことがわかります。 – David