仪器显示只需打开和关闭警报控制器就会造成内存泄漏。
@IBAction func delBtnAc(sender: AnyObject) {
let deleteAlert = UIAlertController(title: "Delete Image?", message: "", preferredStyle: .Alert)
let cancelIt = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
deleteAlert.addAction(cancelIt)
presentViewController(deleteAlert, animated: true, completion: nil)
}
我已将警报简化为仅用于测试的取消按钮。
编辑:在关闭时删除了deleteAlert.dismissViewController。修复了保留周期,但仍显示内存泄漏。也许是一个错误。
答案 0 :(得分:4)
您的警报操作的完成处理程序具有对警报控制器的强引用。
您的提醒操作强烈引用其完成处理程序。
警报控制器强烈引用警报操作。
所以这里我们有一个经典的保留周期。
问题是从完成处理程序到警报控制器本身的强引用,在这种情况下,恰好完全没有必要。警报控制器在运行适当的完成处理程序后自行解除。
我们可以完全消除这条线。
如果我们在完成处理程序中做了非冗余的事情,我们需要创建一个对完成处理程序的弱引用,以便我们可以在完成处理程序中使用它。
答案 1 :(得分:0)
我发现了同样的问题。
我通过在按钮操作后将警报设置为空来解决它:
deleteAlert = null 在您的取消按钮操作中