Sas*_*ats 5 weak-references block retain-cycle swift
以下是您可以在游乐场中运行的代码示例
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
Run Code Online (Sandbox Code Playgroud)
它说明了为具有潜在保留周期的块分配值的3种方法.大小写1.并且2.不会创建保留周期,unowned self但是如果3.看起来没有办法打破保留周期(deinit从不打印).如您所见,我甚至尝试创建一个本地无主参考.
这是理想的行为,是"按设计"吗?或者我错过了什么?
谢谢!
是的,这是设计的行为.
在不调用它的情况下访问方法就像s.tempHandler是一个闭包表达式{ x in s.tempHandler(x) }.这里s没有标记unowned或weak因此被封闭物保留.如果您希望将其捕获为unowned或weak,则必须明确写出闭包.
| 归档时间: |
|
| 查看次数: |
839 次 |
| 最近记录: |