KVO 使用及原理

当一个对象对观察时,系统会创建一个子类NSNotifying_A, 在子类中重写了对象被观察属性的set方法,并改变了该对象的isa指针的指向(指向了创建的子类),当属性的值发生改变,会调用子类的set方法,发出通知。

一、KVO的基本使用

给_person对象 添加观察者, 当person对象的name的值发生改变的时候, 会触发observer方法。

KVO 使用及原理_第1张图片

二、当keyPath为对象时,需要监听对象的属性比较多

KVO 使用及原理_第2张图片

三. 手动触发KVO

系统默认该对象的所有属性 都能被观察到 ,重写下面方法, 可以单独设置某个属性不能被观察

KVO 使用及原理_第3张图片

四. 自定义KVO

根据kvo的原理, 可以自定义一个kvo, 建一个NSObject的分类, 添加方法

通过runtime的方式, 动态创建一个类, 并给该类添加方法

KVO 使用及原理_第4张图片

五. 其他

关于容器类(如:NSMutableArray)的观察, 当通过addObject: 向数组中添加对象, 不会触发KVO, 因为并没有触发set方法,

解决方法: 通过KVC 方法 - mutableArrayValueForKey:

你可能感兴趣的:(KVO 使用及原理)