1.什么是KVC和KVO?
KVC:key value coder,键值编码,可以set或者get key对应的value,可以给属性,甚至是私有属性进行赋值和取值
KVO:key value observer,键值监听;可以监听key对应的value的改变,注意移除。
2.Notification和KVO有什么不同?
Notification是通过应用的通知中心进行通知的,可以1对多,多对1
KVO只能观察一个值。
3.KVO在objc中怎么实现的?
(1)KVO是基于运行时实现的;
(2)当某个类的对象第一次被观察时,系统会在运行时期动态的的创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的setter方法。派生类的被重写的setter方法内部实现真正的通知机制;
(3)每个类对象都有一个isa指针指向当前类,当一个类对象的第一次被观察,那么系统会偷偷将isa指针指向动态生成的派生类,从而在给被监控属性赋值时执行的是派生类的setter方法;
(4)键值观察通知依赖于NSObjec的两个方法:willChangeValueForkey:和didChangeValueForKey:;在一个被观察属性发生改变之前,willChangeValueForKey一定会被调用,这就会记录旧值;而发生改变后,会调用didChangeValueForKey。