在WWDC 2014会议403 Intermediate Swift和transcript中,有以下幻灯片
演讲者说,在这种情况下,如果我们不在[unowned self]
那里使用它,将会导致内存泄漏。这是否意味着我们应该始终使用[unowned self]
内部闭包?
在Swift Weather应用程序的ViewController.swift的第64行,我没有使用[unowned self]
。但是我通过使用@IBOutlet
诸如self.temperature
和来更新UI self.loadingIndicator
。可能没问题,因为@IBOutlet
我定义的全部都是weak
。但是为了安全起见,我们应该一直使用[unowned self]
吗?
class TempNotifier {
var onChange: (Int) -> Void = {_ in }
var currentTemp = 72
init() {
onChange = { [unowned self] temp in
self.currentTemp = temp
}
}
}
onChange
应该是一个[weak self]
闭包,因为它是一个公共(内部,但仍然是)属性,因此另一个对象可以获取并存储闭包,并保持TempNotifier对象不存在(如果using对象onChange
直到TempNotifier
通过自己对(TempNotifier
)的弱引用看到s 消失后才放开闭包。如果var onChange …
是的private var onChange …
话[unowned self]
将是正确的。 我对此不是100%肯定的;如果我错了,请有人纠正我。
[]
?定义空数组相同 我在Apple文档中找不到解释。
{}
是空闭包(闭包的实例),默认设置(不执行任何操作),(Int) -> Void
是闭包定义。