【发布时间】:2018-03-18 11:27:57
【问题描述】:
我有:
private var statusLabel: UILabel!
private var errorObserver: NSKeyValueObservation?
self.errorObserver = self.viewModel.observe(\.errorString)
{ [weak self] (viewModel, change) in
self?.statusLabel.text = viewModel.errorString
}
这里需要[weak self]吗?
【问题讨论】:
-
没有
[weak self],你就有一个保留周期。这可能是可接受的或想要的(如果您最终明确删除观察者)或不。 -
@MartinR 这种新的 (Swift 4 / Xcode 9) KVO 形式不再需要在
deinit中显式删除观察者。这不会改变事情吗? -
我不这么认为(也许我忽略了一些东西!)。您可以通过将
deinit { print("deinit") }添加到您的观察类中来轻松检查它,看看它是否被调用。
标签: swift swift4 key-value-observing