KVO的理解

来源:互联网 发布:java编译原理 pdf 编辑:程序博客网 时间:2024/06/06 02:22

KVO只能监听属性的值的变化,而且有一定的弊端!


当给一个对象添加监听后,会生成这个类的子类.NSKvoNotifying,并重写被监听属性的set方法;在开发中如果创建了同名的类,会报错。

使用Objective-C 强大的runtime功能实现了这个功能。属性类class中并没有实现KVO通知的相关方案,而是在调用addObserver之后定义属性类的子类subclass,subclass里边实现了属性的setter方法,setter方法中实现发动通知的功能。然后subclass中实现class函数,还让返回属性类的class,再让属性类对象的isa指向subclass,这样就伪装成表面上看还是属性类自己实现的通知功能。

通过原理我们可以看出 必须使用属性方法或者setValue:forKey方法赋值才会发送通知,直接赋值是不会收到通知的。

0 0