1.KVO实现的原理
KVO基于runtime实现的,其原理当某个类第一次被观察时,系统会在运行期动态的创建该类的一个子类,在这个子类中重写被观察属性的setter方法,子类在重写的setter方法内实现真正的通知机制(如果元类为Person,那么子类名为NSKVONotifying——Person),每个类对象中都有一个isa指针指向当前类,当一个类对象第一次被观察时,系统会偷偷将isa指针指向动态生成的子类,从而在被监控属性赋值的时候执行的是子类的setter方法
键值观察通知依赖于NSObject的两个方法,willChangeValueForKey,和didChangeValueForkey,observeValueForKey在两个方法之间调用