1、KVC(key value coding)是键值编码,简单的来说就是通过setValue:属性值 valueForKeyPath:属性路径 来给属性赋值的。
如果属性是基本数据类型,那么这个操作就相当于的属性的setter 、getter方法;
KVC的内部实现:一个对象在调用setValue的时候;
a、首先根据方法名找到运行方法的时候所需要的环境参数;
b、他会从自己isa指针结合环境参数,找到具体的方法实现接口;
c、再直接查找得来的具体方法的实现;
2、KVO(Key Value Observing)就是键值观察,在监听时时建立在键值编码的基础之上的,也就是当指定的属性被修改了,允许对象接收到通知的机制。每次指定的属性被观察对象的属性被修改的时候,KVO都会自动的去通知相应的观察者,相当于设计模式中的观察者模式;
3、KVO的优点:
(1)当有属性值发生改变,KVO会自动提供消息通知;
(2)比较方便,KVO不需要开发人员添加任何代码,可以直接在程序中使用;
(3)支持多个观察者观察同一个属性;
KVO和通知的区别在于,KVO是对象之间的直接交互,而通知则需要通知中心notificationCenter来作为交互。