1、KVO
KVO的作用是监听对象的属性的改变。重点之一就是必须是触发了属性的setter方法才会触发KVO,只是修改成员变量的值是不会触发KVO的
未使用KVO监听的对象

使用了KVO监听的对象

绿色的都是重写的方法
_NSSet*ValueAndNotify的内部实现

由图可知,要想手动触发KVO时,只需调用will和change两个方法,缺一不可
2、KVC
setValue:forKey:的原理

valueForKey:的原理

注:用KVC赋值的时候,即使没有实现set方法也会触发KVO(如果使用了的话),这是因为KVC底层实际上会调用willChange和didChange那两个方法
网友评论