问题1:KVO底层实现原理?
答:动态创建监听对象的派生子类,并使对象isa指向派生类,重写setter方法,当监听值发生变化前后,willChangeValueForKey ,didChangeValueForKey 会分别调用 ......(表层流程理解)
问题2:既然监听对象isa指向了派生类,那么调用 监听对象 的class 方法 返回的是什么?Object_getClass会返回什么?
答:kvo底层不仅仅实现了isa-swizzling, 且重写了class方法 返回本类,这点可看出对象ISA并不可靠。
object_getClass返回的是类对象的ISA指针,并不是监听对象的ISA指针,返回的名字是本类。
问题3:KVO使用有什么问题?
答:KVO还不支持block语法,需要单独重写父类方法,这样加上add和remove方法就会导致代码很分散。
参考文章:一网打尽KVO