一 kvc:键值编码
使用场景;字典与模型的转换,访问私有变量;动态取值和赋值;实现kvo;
底层实现:isa+环境参数(方法名找到)-实现接口->方法的具体实现;
搜索顺序:以setvalue为例,setter方法->类方法返回yes,直接访问实例变量-》setvalue:forkey:,抛出异常,但这个方法可以重写;
二 kvo:键值观察
1 原理:通过isa-swizzling实现;NSKVONotifying_派生类;
2 手动实现kvo;
3 kvo基于kvc实现:
kvo重写了setter方法,搜索setter方法的机制与kvc是一样的;
回调方法change参数新旧值也是通过valueforkey获取的。