1

基本的に、チャットルームを制御する UIViewController があります。UIViewController が何らかの方法で定義された場合、現在のユーザーはチャネルを離れる必要があります。

現在、私のコードは次のとおりです。

class ChatViewController: SLKTextViewController {

    var channel: TWMChannel? = nil

    // A ton of other code...

    deinit {
        channel!.leaveWithCompletion({
            _ in
        })
    }

私は deinit のようなコードしか見たNSNotificationCenter.defaultCenter().removeObserver(self)ことがなく、これが安全かどうかについてオンラインで何も見つけていません。

本質的に、このView ControllerはUINavigationControllerスタックの一部であり、View Controllerがポップされるたびに(deinitが常に呼び出されると思います)、ユーザーにチャネルを離れてもらいます。ナビゲーション バーの左上の戻るボタンとパン ジェスチャを処理するための好ましい方法がある場合は、実装を確認したいと思います。

4

1 に答える 1

1

でこれをdeinit行うのではなく、 で行いviewWillDisappearます。それがあなたの言っていることです(ユーザーがその画面を離れたときに離れる)、多かれ少なかれそのアプローチはうまく聞こえます。しかし、channel!.ここは正しくありません。channel?.チャネルが設定されていない場合はクラッシュするのではなく、チャネルが設定されていない場合は何もしないことを意味します。

deinit一般的な場合に呼び出されることは約束されておらず、いずれにせよ、View Controller が実際に破棄されたときにのみ呼び出されます。これは、予想よりもはるかに遅れる可能性があります (特にスタックの一部である場合)。

于 2016-09-11T13:42:29.843 に答える