ios - UIAlertController 内存泄漏/问题 - Swift

标签 ios swift memory-leaks uialertcontroller

仪器显示简单地打开和关闭警报 Controller 会导致内存泄漏。

@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)
}

我已将警报缩减为只有一个用于测试的取消按钮。

Edited: Removed deleteAlert.dismissViewController in closure. Fixed retain cycle, but still shows a memory leak. Perhaps a bug.

最佳答案

您的警报操作的完成处理程序对您的警报 Controller 有很强的引用。

您的警报操作对其完成处理程序有很强的引用。

您的警报 Controller 对警报操作有很强的引用。

所以这里我们有一个经典的保留周期。

问题是从完成处理程序到警报 Controller 本身的强引用,在这种情况下,这恰好是完全不必要的。警报 Controller 在运行适当的完成处理程序后自行解除。

我们可以完全消除这条线。

如果我们在完成处理程序中做一些非冗余的事情,我们需要创建一个对完成处理程序的弱引用,以便我们可以在完成处理程序中使用它。

关于ios - UIAlertController 内存泄漏/问题 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31906856/

相关文章:

ios - 停止从右到左语言的 UIImage 翻转

Swift 3 类/属性引用语法 - Couchbase Lite

ios - 快速获取webview的滚动位置

ios - 带有嵌套 JSON 的 valueForKeyPath

iOS 9 启动服务 : ERROR: There is no registered handler for URL scheme itms-services

ios - 如何发现哪些 friend 接受了 Facebook API 的邀请?

ios - Firebase 和后台运行的预定通知

python - python pandas 重组索引中的内存泄漏

c++ - Char * w/内存泄漏

delphi - 何时/何地释放发送到外部 DLL 的 PWideChars