一尘不染

在Swift 4中,如何删除基于块的KVO观察器?

swift

如果我这样存储观察者:

let observer: NSKeyValueObservation = foo.observe(\.value, options: [.new]) { (foo, change) in
    print(change.newValue)
}

observer一旦不再需要我该如何删除/禁用/清理?

我的foo实例没有remove接收到NSKeyValueObservation实例的任何类似方法,observer本身也没有任何remove类似的方法。


阅读 262

收藏
2020-07-07

共1个答案

一尘不染

在iOS 11中,您不必这样做。只是让观察者超出范围即可。让观察者在观察者之前死亡或让被观察者在观察者之前死亡不再有任何惩罚,因此您没有实际工作要做。

另一方面,如果您确实
注销观察者,则将其从保留它的内容中删除,或告诉它invalidate。(某些东西必须保留下来,因为如果您不坚持观察者,观察者 将死亡,
并且永远不会调用观察者函数。)

(您说的是“如果我这样存储观察者”,但是使用let来存储观察者的方式有点愚蠢。存储观察者的方法更好。最好将其放在Set中,以后可以从中删除它,或至少将其存储在Optional中var,您以后可以将其设置为nil。)

2020-07-07