什么是KVO?
KVO是观察者模式,当一个被观察者对象属性发生改变时,观察者会收到通知。
有利于两个类之间的解耦。
KVO的实现原理
KVO基于运行时原理。
当监听对象的属性时,会为被监听对象的类创建一个派生类NSKVONotifying_Class并且重写属性的setter方法,会在setter方法之前和之后通知被监听对象的属性值更改情况。在这个过程中指向原来对象的isa指针会指向新创建的子类。
每个对象都有isa指针,它指向该对象所属的类。
setter内的实现
willChangeValueForKey:在属性改变之前调用;
didChangeValueForKey:在属性改变之后调用;
observeValueForKey:ofObject:change:context: 最后也会被调用
KVO触发条件
是否执行了setter方法,是否使用了kvc赋值。
KVO使用
1、注册监听者,实施监听
params:
object:被监听对象
observe:监听对象
keyPath:被监听属性
options:
...new:监听方法中获取新值。
...old: 监听方法中获取旧值。
...initail:监听方法中获取初始化值
...prior:属性改变前后的值都会传到监听方法
2、实现监听方法
网友评论