09年的一篇文章,比较深入的探究了KVO的内部实现。
文章地址:https://www.mikeash.com/pyblog/friday-qa-2009-01-23.html
KVO 的实现机制
KVO的实现依赖于runtime。
当观察一个对象时,一个新的类会动态的被创建,这个类继承自该对象所属的类,并重写了被观察属性的setter方法;重写的setter方法会在调用setter方法前后发出通知给观察者。
最后把原对象的isa指针指向新的类。
KVO的缺陷
只能通过重写系统方法-observeValueForKeyPath:ofObject:change:context:来获取通知。不能使用自定义的selector,不能传递block。
关于对KVO缺陷的吐槽引用链接-->KVO缺陷
本文章仅作为学习记录使用,原博链接在这KVO的实现机制原博英文版
中文版中文版
网友评论