【发布时间】:2014-09-22 13:15:09
【问题描述】:
我正在尝试在 Swift 中解决基于闭包的强引用循环。
在下面的代码中,对象由拥有的视图控制器保留。 ProgressHUD 是一个 UIView,它也被拥有的视图控制器保留。每次调用完成处理程序时都会泄露ProgressHUD。使用新的闭包捕获功能时,将 self 声明为 weak 或 unowned 并不能解决内存泄漏问题。
object.setCompletionHandler { [weak self] (error) -> Void in
if(!error){
self?.tableView.reloadData()
}
self?.progressHUD?.hide(false)
}
但是,如果我在闭包之外为 self 声明一个弱 var,它会修复内存泄漏,如下所示:
weak var weakSelf = self
object.setCompletionHandler { (error) -> Void in
if(!error){
weakSelf?.tableView.reloadData()
}
weakSelf?.progressHUD?.hide(false)
}
关于为什么这不适用于 Swift 捕获的任何想法?
【问题讨论】:
-
不应该有保留周期
标签: swift closures weak-references