ios 学习

iOS KVO(基本使用 触发模式 属性探究 自定义KVO等)

2018-11-19  本文已影响2人  羽裳有涯
image
KVO全称为Key Value Observing,键值监听机制,
由NSKeyValueObserving协议提供支持,NSObject类继承了该协议,所以NSObject的子类都可使用该方法。

一、基本使用

/* options: 有4个值,分别是:
 NSKeyValueObservingOptionOld 把更改之前的值提供给处理方法
 NSKeyValueObservingOptionNew 把更改之后的值提供给处理方法
 NSKeyValueObservingOptionInitial 把初始化的值提供给处理方法,一旦注册,立马就会调用一次。通常它会带有新值,而不会带有旧值。
 NSKeyValueObservingOptionPrior 分2次调用。在值改变之前和值改变之后。 
*/ 
//注册一个监听器用于监听指定的key路径 
[self.person addObserver:self 
              forKeyPath:@"name" 
                 options:NSKeyValueObservingOptionNew 
                 context:nil];

//当key路径对应的属性值发生改变时,监听器就会回调自身的监听方法,如下 
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)contex 
}
- (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"];
//删除指定的key路径监听器
[self.person removeObserver:self forKeyPath:@"name"];
//删除指定的key路径监听器,只是多了context参数
[self.person removeObserver:self forKeyPath:@"name" context:nil];

二、自己实现 KVO

查看下一篇文章 iOS KVO 自己实现(利用Runtime)

上一篇 下一篇

猜你喜欢

热点阅读