实现过程:
对一个person类的实例对象A的一个属性添加kvo之后,会在runtime时生成一个person类的子类——NSKVONotifying_person类,并让对象A的isa指针指向该子类,在该子类中会有一个NSSet*valueAndNotify的方法(根据监听的属性的值的不同,会有不同的类型,int、double等),该方法会在调用A对象的set方法之前调用willChangeValueforkey方法,调用set方法之后调用didChangeValueforkey,在didchange方法中会触发kvo的代理
如何手动触发:
让对象调用
willChangeValueforKey: 和
didChangeValueforKey:方法即可手动触发监听,仅调用didChangeValueforKey:不会生效
网友评论