KVC
KVC的全程是 key-value-coding
,键值编码是由NSKeyValueCoding
非正式协议启用的一种机制,对象可以用过字符串来间接访问其属性
- 1.按照顺序查找名为set<Key>(get), 或_set<key>(get)方法,如果找到,直接调用,如果没找到,进行下一步
- 2.调用类方法 access Instance Variables Directly 方法,如果返回 yes,就寻找名为_<key>,_is<Key>,<key>,或者is<Key>的变量,如果找到,则直接使用输入值设置变量
- 3.如果access Instance Variables Directly方法返回 no,则调用setValue:forUndefinedKey:,默认会抛出异常
KVC 的使用场景
- 1.对象动态的取值和设值
- 2.Model和字典转换
- 3.用KVC来访问和修改私有变量
KVO
KVO 的原理:
- 1.当属性第一次被观察时,系统利用RuntimAPI动态生成一个派生类(该类的子类),
- 2.重写被观察属性的setter 方法。
- 3.将isa指针指向派生类。
KVO是基于KVC,KVC是KVO 的入口,通过指定类的属性名称,来达到类属性值的变化,分为手动和自动俩种模式,
其中手动模式 需要在改变属性值的前后分别实现
WillChangeValueForKey
didChangeValueForKey
并且再类中实现方法
automaticallyNotifiesObserversForKey:(Nsstring *)
isa指针:Nsobject 的本质