iOS KVC和KVO

KVC:键值编码,一个非正式的协议,使用字符串访问一个对象实例变量的机制。

一个对象在调用setvalue时,
1、首先根据方法名找到运行方法的时候所需要的环境参数。
2、它会从isa指针结合环境参数找到具体方法实现的接口。
3、再直接查找得到的具体的方法。

KVO:键值监听,指定对象的属性被修改,对象就会接受到通知。
使用KVO的前提是遵循 KVO 的属性设置方式来变更属性值。

使用步骤:
1、注册观察者,实施监听
2、回调方法中处理属性变化
3、移除观察者

原理:当观察对象A时,KVO机制动态创建A的子类,并为子类重写了被观察属性keyPath的set方法,set方法负责通知被观察对象属性改变的状况。
进一步分析:
利用对象的isa指针指向该对象的类,对象注册为观察者时,isa指针指向新子类,这个被观察的对象就变成新子类的对象,因而在该对象上对set方法调用就会调用已重写的set方法,从而激活键值通知机制。

通知(notification)比KVO多了发送通知的一步,对象之间直接交互,notification明显的多,KVO是由系统通知的。通知的优点是监听不局限于属性变化,可以对各种各样的状态进行监听,监听范围广,例如键盘的弹起,前后台等系统监听。

你可能感兴趣的:(iOS KVC和KVO)