UIViewController未被取消初始化

时间:2018-02-20 11:02:28

标签: ios swift uiviewcontroller uinavigationcontroller

class MyViewController: UIViewController {
    // ...

    deinit {
        print("test deinit")
    }

    // ...

    func exit() {
        self.navigationController?.popViewController(animated: true)
    }

    // ...
}

这是我的视图控制器的一部分,当它出现时总是在导航控制器中推送。

我希望它从导航控制器弹出时取消初始化。

但是,当它被任何方法弹出时,它都从未打印过“测试deinit”(调用exit(),刷卡等等。)

我猜这种呈现方法可以解决这个问题。所以我测试了以下两种方法。但我无法以任何方式解决它。

let controller = UIStoryboard(name: "MyStoryboard").instantiateViewController(withIdentifier: "MyViewController") as! MyViewController

self.navigationController?.pushViewController(controller, animated: true)

self.performSegue(withIdentifier: "ToMyVC", sender: nil)

有什么问题?我如何取消初始化?

1 个答案:

答案 0 :(得分:1)

检查您的关闭,代表必须出错,并保留viewController

确保您的代理人被声明为weak

weak var delegate: YourDelegateProtocol

并且使用self的关闭可以使用[weak self][unowned self]

执行
let yourClosure : (()->Void) = { [weak self] in
    //your closure implementation
}