Безопасно ли совершать сетевые вызовы, когда 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
не обещается вызываться в общем случае, и в любом случае вызывается только тогда, когда контроллер представления действительно уничтожен, что может быть намного позже, чем вы ожидаете (особенно если это часть стека).