1 kvc: 键值编码,一种非正式的协议, 提供了一种机制间接的访问属性. 主要作用是可以通过键值路径对属性赋值和获取属性的值. 常用它来搞系统的类的私有属性.
作用:
a. 通过键值路径给属性赋值, 主要是可以给私有属性进行赋值
b. 通过键值路径获取属性的值, 也可获取私有属性的值
c. 字典转模型 setValuesForKeyWithDictionary: 这个时候模型对象的属性必须和字典的key一一对应, 否则会报错, 当然我们常用的第三方库还是比较好用的
2 kvo:监制观察者, 提供了一种观察者机制, 是iOS中对观察者模式的一个典型的体现. 通过对对象的某个属性添加观察者, 当属性值改变的时候就会调用observeValueForKeyPath方法,通知观察者.
观察者模式: 观察者模式定义了对象之间的一对多的依赖, 这样一来, 当一个对象改变时,它的所有依赖者都会受到通知并自动更新
观察者模式提供了一种对象设计, 让主题和观察者之间松耦合, 他们依然可以交互, 但是不用清楚彼此的细节, 松耦合的设计让我们建立有弹性的OO系统,能够应对变化, 是因为对象之间彼此依赖降到了最低.
KVO的底层实现:
KVO是基与runtime机制实现的,当某个类的对象第一次被观察时,系统就会在运行期动态的创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的setter方法,派生类在重写的setter方法中实现真正的通知机制, 并且会重写dealloc方法来释放资源.
网友评论