KVO是基于RunTime机制实现的
当我们为一个属性添加观察者模式之后,系统会利用RunTime动态创建一个继承于属性所在类的子类 "NSKVONotifying_XXX" ,XXX为类名,并且让实例对象的isa指向这个全新的子类,当修改实例对象时,会调用Foundation框架的_NSSetXXXValueAndNotify函数,在_NSSetXXXValueAndNotify内部会调用
willChangeValueForKey:
父类原来的setter方法进行修改 ([super setXXX:])
didChangeValueForKey: 内部会触发监听器的监听方法 (observeValueForKeyPath:ofObject:change:content:)