1

基本上,我有一个控制聊天室的 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 总是会在此期间被调用)时,我希望用户离开频道。如果有一种首选的方法来处理导航栏上的左上角后退按钮和平移手势,那么我很乐意看到实现。

4

1 回答 1

1

不要这样做deinit,这样做viewWillDisappear。这就是您所说的意思(当用户离开该屏幕时离开),这种方法或多或少听起来不错。但是,channel!.这里是不正确的。您的意思是channel?.,如果未设置通道,它什么也不做,而不是在未设置通道时崩溃。

deinit不承诺在一般情况下调用,并且在任何情况下仅在视图控制器实际被销毁时​​调用,这可能比您预期的要晚得多(特别是如果它是堆栈的一部分)。

于 2016-09-11T13:42:29.843 回答