为什么此警报不允许我的视图控制器解除分配?



我正试图从内存中完全释放视图控制器。经过几个小时的测试,我终于将它缩小到了内存中的UIAlertController,它可以防止我的视图控制器被释放。

@objc func logout_click() {
let alert = UIAlertController(title: "Confirmation", message: "Are you sure you want to log out?", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "YES", style: .default, handler: { _ in
// 'YES' button action
do {
try Auth.auth().signOut()
self.popInit()
} catch {
print(error)
}
}))
alert.addAction(UIAlertAction(title: "NO", style: .default, handler: { _ in
// 'NO' button action
alert.dismiss(animated: true)
}))
self.present(alert, animated: true)
}
func popInit() {
//Go back to init screen
self.navigationController?.popToRootViewController(animated: true) 
}

只要此警报不显示,我就可以使用popInit((,我的视图控制器也可以解除分配,但此警报显示后,即使在解除后,视图控制器也不会解除分配。我没有引用此函数范围之外的任何变量,那么为什么这不允许我解除分配呢?我需要做些什么才能允许视图控制器解除分配?

让YES操作处理程序声明[weak self]并调用self?.popInit()

此外,正如注释中所建议的,您可以将NO处理程序替换为nil

最新更新