iOS的KVO即是key-value observing。
1.建立在KVC之上的的机制。
2.主要功能是检测对象属性的变化。
3.这是一个完善的机制,不需要用户自己设计复杂的视察者模式。
4.对需要视察的属性要在前面加上dynamic关键字。
KVO的使用过程中需要注意的问题
1,在写swift的KVO的过程中,其不能监听基本数据类型的属性,若想监听需将其改成NSNumber类型,或其它类型,否则监听的代理方法不走。
2,在写swift的KVO的过程中,被监听的属性必须用“dynamic”修饰,否则监听的代理方法不走。
3,在写swift的KVO的过程中,要保证监听者和被监听者同时存在(考虑到其生命周期)。
4,在写swift的KVO的过程中,要确保最后移除观察者,防止内存泄
添加监听方法
view1?.addObserver(self, forKeyPath: "num", options: .new, context: &mycontext)
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
print(change,keyPath,context)
if context == &mycontext {
print("yes")
if let newValue = change![NSKeyValueChangeKey.newKey]{
print("newValue",newValue)
}
}else{
super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
}
}
移除监听
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated);
//移除监听
// self.removeObserver(self, forKeyPath: "age", context: &myContext);
// self.removeObserver(self, forKeyPath: "age")
self.removeObserver(self, forKeyPath: "age", context: &mycontext)
}