以下是您可以在操场上运行的代码示例
import Foundation
class TempNotifier {
var onChange: (Int) -> Void = {t in }
var currentTemp = 72
init() {
// 1.
onChange = { [unowned self] temp in
self.currentTemp = temp
}
// 2.
onChange = {[unowned self] temp in
self.tempHandler(temp)
}
// 3.
unowned let s = self
onChange = s.tempHandler
}
deinit {
println("deinit")
}
private func tempHandler(temp: Int) {
self.currentTemp = temp
}
}
var tN: TempNotifier? = TempNotifier()
tN = nil
它说明了为具有潜在保留周期的块分配值的 3 种方法。案例1.
并不2.
创建保留周期,因为unowned self
如果3.
似乎没有办法打破保留周期(deinit
从不打印)。如您所见,我什至尝试创建一个本地无主引用。
这是期望的行为,是“设计使然”吗?还是我错过了什么?
谢谢!