KVO(Key-Value Observing)本质是监听set方法,重写set方法。
过程:
1、动态生成一个 NSKVONotifying_Class 的子类
2、改变父类的 isa 指针,指向动态创建的子类
3、添加 setName 方法(重写)
4、保存观察者(关联属性)
void setName (id self, SEL _cmd, NSString *str)
{
1、保存当前的Class
2、将self指针指向父类
3、调用父类的setName
4、拿出观察者
5、通知外界
6、改回子类
}
KVC(Key-Value Coding):直接使用一个或一串字符串标识符去访问,操作类的属性。
- (nullable id)valueForKey:(NSString*)key; 的调用顺序:
先调用相关方法:
getKey > Key > isKey
如果没有相关方法,就会调用下面这个方法:
+(BOOL)accessInstanceVariablesDirectly。
如果返回NO,程序就报错;如果返回YES(默认返回YES),就去找相关变量。顺序如下:0
_key > _isKey > key > isKey