UIAlertController 没有被释放

UIAlertController not getting deallocated

我创建了一个 UIAlertController 并在其中添加了一个文本字段。问题是在我解除警报控制器后,它没有解除分配并显示在内存图中。

        let alertController = UIAlertController(title: "Enter link", message: nil, preferredStyle: .alert)
        alertController.addTextField { (textField) in
            textField.placeholder = "www.xxx.com"
        }
        
        let cancel = UIAlertAction(title: "CANCEL", style: .cancel, handler: nil)
        let ok = UIAlertAction(title: "SUBMIT", style: .default) { [weak self] (_) in
            guard let self = self else { return }
            guard let textFields = alertController.textFields, let textField = textFields.first else { return }
            if let text = textField.text {
                
            }
        }
        alertController.addAction(cancel)
        alertController.addAction(ok)
        present(alertController, animated: true, completion: nil)

但是,如果我删除 alertController.addTextField,它就会被释放,并且它不存在于内存图中。

我尝试检查是否由于我的代码引入了任何内存泄漏,但发现 none。

您保留了“ok”警报操作中的 alertController,该操作又由 UIAlertController 保留。

这是一个保留循环,两个对象都不能相互释放。

你应该避免这种情况,也许可以使用弱引用,即:

let ok = UIAlertAction(title: "SUBMIT", style: .default) { [weak alertController] (_) in
    // Upgrade weak to strong reference
    guard let alertController = alertController else { return }
    
    // Do your thing
}