Безопасно ли совершать сетевые вызовы, когда View Controller отключен?

По сути, у меня есть UIViewController, который управляет чатом. Когда UIViewController деинсталлируется каким-либо образом, текущий пользователь должен покинуть канал.

В настоящее время мой код:

class ChatViewController: SLKTextViewController {

    var channel: TWMChannel? = nil

    // A ton of other code...

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

Я только когда-либо видел такой код NSNotificationCenter.defaultCenter().removeObserver(self) в deinit, и я не нашел в Интернете ничего о том, безопасно ли это делать.

По сути, этот контроллер представления является частью стека UINavigationController, и всякий раз, когда контроллер представления срабатывает (что, я думаю, deinit будет вызываться всегда), я хочу, чтобы пользователь покинул канал. Если есть предпочтительный способ сделать это, который обрабатывает верхнюю левую кнопку назад на панелях навигации и жест панорамирования, то я бы хотел увидеть реализацию.

1 ответ

Не делай этого в deinitсделай это в viewWillDisappear, Это то, что вы говорите, что имеете в виду (уходите, когда пользователь покидает этот экран), и более или менее такой подход звучит нормально. Тем не мение, channel!. здесь неверно. Вы определенно имеете в виду channel?. так что он ничего не делает, если канал не установлен, а не падает, если канал не установлен.

deinit не обещается вызываться в общем случае, и в любом случае вызывается только тогда, когда контроллер представления действительно уничтожен, что может быть намного позже, чем вы ожидаете (особенно если это часть стека).

Другие вопросы по тегам