iOS KVO(基本使用 触发模式 属性探究 自定义KVO等)
2018-11-19 本文已影响2人
羽裳有涯
image
KVO全称为Key Value Observing,键值监听机制,
由NSKeyValueObserving协议提供支持,NSObject类继承了该协议,所以NSObject的子类都可使用该方法。
一、基本使用
- 1、注册观察者(为被观察这指定观察者以及被观察者属性)
/* options: 有4个值,分别是:
NSKeyValueObservingOptionOld 把更改之前的值提供给处理方法
NSKeyValueObservingOptionNew 把更改之后的值提供给处理方法
NSKeyValueObservingOptionInitial 把初始化的值提供给处理方法,一旦注册,立马就会调用一次。通常它会带有新值,而不会带有旧值。
NSKeyValueObservingOptionPrior 分2次调用。在值改变之前和值改变之后。
*/
//注册一个监听器用于监听指定的key路径
[self.person addObserver:self
forKeyPath:@"name"
options:NSKeyValueObservingOptionNew
context:nil];
- 2、实现回调方法
//当key路径对应的属性值发生改变时,监听器就会回调自身的监听方法,如下
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)contex
}
- 3、触发回调方法
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
static int i = 0;
person.name = [NSString stringWithFormat:@"%d", i++];
}
*只有触发setter 方法 负责通知观察对象属性才会改变。*
其实只要触发一下两个方法 就会有回调
[self willChangeValueForKey:@"person.name"];
[self didChangeValueForKey:@"person.name"];
- 4、移除观察者
//删除指定的key路径监听器
[self.person removeObserver:self forKeyPath:@"name"];
//删除指定的key路径监听器,只是多了context参数
[self.person removeObserver:self forKeyPath:@"name" context:nil];
二、自己实现 KVO
查看下一篇文章 iOS KVO 自己实现(利用Runtime)