当你设置观察某个对象的属性时,一个新的类会被创建,该类继承自该类对象的原本的类,并重写了被观察属性的setter方法。重写的setter方法会负责在调用原setter方法之前和之后,通知所有观察对象:值的变化。
最后通过isa(isa-swizzling)混写,把对象的isa指针指向新创建的子类,对象就神气的变成了新创建的类的实例。
在重写的setter方法中,插入-willChangeValue: 和-didChangeValue: 两个方法,来做旧value的记录,以及新value改变的通知。
代码后补。