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)
有什么问题?我如何取消初始化?
答案 0 :(得分:1)
检查您的关闭,代表必须出错,并保留viewController
确保您的代理人被声明为weak
,
weak var delegate: YourDelegateProtocol
并且使用self
的关闭可以使用[weak self]
或[unowned self]
let yourClosure : (()->Void) = { [weak self] in
//your closure implementation
}