最近看到一个题,KVO KVC实现原理。
早前只是会使用,而且使用频率极低,通常遇到需要监听的情况,直接在属性 set方法里添加要处理的逻辑,直到看到这问题
KVO: Key Value Observer
作用: 键值监听
通常情况的使用上一段代码
person 在 addObserver 之后会发生变化可见,会在为WDPerson 动态生成一个新的子类NSKVONotifying_WDPerson
person1的isa指针 指向 NSKVONotifying_WDPerson
person2的isa指针 指向 WDPerson
通过runtime 查看一下 NSKVONotifying_WDPerson都有哪些函数
setAge:, class, dealloc,_ isKVOA,
重写Class 在图一中可见 再次输出class 依然是WDPerson所以仅是系统重写class是为了不让我们发现类已经发生了变化。
isKVOA 应该就是要标记一下是否为KVO动态生成的类
当有多个监听值,想指定有些不必一直监听并且想手动触发可以在类中 重写automaticallyNotifiesObserversForKey
导入hopper 查看WDPerson setage方法
手动触发方法就 只要在set方法中添加即可
[self willChangeValueForKey:@"age"];
_age = age;
[self didChangeValueForKey:@"age"];