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))
}
它很容易理解和使用,但开发人员仍然不经常使用它。
希望您理解此模式,并在您的项目中也使用它。