KVO是Objective-C对观察者设计模式的一种实现
指定一个被观察的对象, 当对象的某个属性发生改变时, 对象会获得通知
当观察某对象A时, KVO机制动态创建一个对象A当前类的子类, 并为这个新的子类重写被观察属性keyPath的setter方法.setter方法随后负责通知观察对象属性的改变状况
1. 被观察对象的isa指针从指向原来的A类,被KVO机制修改为指向系统新创建的_A类,来实现当前属性值改变的监听
2.KVO的键值观察通知依赖于NSObject的两个方法willChangeValueForKey和didChangevalueForKey,在存取值的前后分别调用2个方法
KVC实现原理
KVC可以通过对象属性名称key直接给属性值value编码赋值, 这样可以避免我们调用getter和setter方法, 从而简化我们的代码, 也可以用来修改系统控件内部属性(黑魔法)
[site setValue:@"sitename" forKey:@"name"];
就会被编译器处理成:
IMP method = objc_msg_lookup (site->isa,sel);
method(site, sel, @"sitename", @"name");