Swift中的KVO(关键值观察)

键值观察是一种机制,它可以在另一个对象的属性发生更改时直接通知该对象。

这是按照Model-View-Controller设计模式设计的应用程序中对象之间的通信模式。

控制器可以观察模型,视图可以观察控制器和模型。 因此,可以使用KVO优雅地处理模型对象属性的更改。

键值观察要求您的对象遵守NSKeyValueObserving协议。 任何继承NSObject的Class都会自动实现NSKeyValueObserving协议,因为NSObject符合NSKeyValueObserving。

注意:NSKeyValueObserving API并不是最干净的API(就语法和参数而言)。 但话虽这么说,它功能强大,开发人员应该使用它。

NSKeyValueObserving :一种非正式协议,对象采用该协议以将其他对象的指定属性的更改通知给对象。

如何注册和观察另一个对象属性?

注册观察

注册观察者对象以接收相对于接收此消息的对象的密钥路径的KVO通知。

  func addObserver(_观察者:NSObject, 
forKeyPath keyPath:字符串,
选项:NSKeyValueObservingOptions = [],
上下文:UnsafeMutableRawPointer?)

注册观察者对象以接收相对于接收此消息的对象的密钥路径的KVO通知。

观察通知方法:

  func watchValue(forKeyPath keyPath:String ?, 
对象:任何?,
更改:[NSKeyValueChangeKey:任何] ?,
上下文:UnsafeMutableRawPointer?)

使用键值观察时的另一个主要问题是内存管理。 当观察者不再对接收特定密钥路径的通知感兴趣时,需要将其明确删除。 您有两个选择。

  deinit { 
removeObserver(self,forKeyPath:#keyPath(property))
}

它很容易理解和使用,但开发人员仍然不经常使用它。

希望您理解此模式,并在您的项目中也使用它。