zoukankan      html  css  js  c++  java
  • KVC 和 KVO 简单总结

    KVC:

    key value coding,键值编码.是一种通过使用属性的名称(key)来间接访问对象属性的方法.这个方法可以不用通过 setter/getter 方法来访问对象的属性.该方法使用的实质是,是使用 valueForKey来代替 getter 方法, setValueForKey 来代替 setter 方法.

    KVC 常用的方法:

           - (id)ValueForKey:   通过 key 值读取对象的属性

           -(id)setValue: forKey: 通过 key 的值来使用属性

           -(id)setNilValueForKey: 将给的 key 字对应的 value 值设置为 nil

           -(id)setValueForUndefinedKey: 错误拦截,在 KVC 没有找到 key 值时调用.

    KVC 的特点:

    • 既可以取值也可以赋值.
    • KVC 是一种间接传值,该方式有利于解耦合.
    • KVC 可以对只读属性/私有属性赋值
    • KVC 有自动装箱(自动类型转换)的功能.
    • 支持键值路径

    键值路径:说白了就是对嵌套比较深的key 取值.主要表现在两个方法之间的区别setValue: forKey: 和 setValue: forKeyPath:

    setValue: forKey: 方法,在使用的时候只是在本层中查找 key 值进行赋

    setValue: forKeyPath: 方法在使用的时候,根据传进来的 key 值在整个项目中查找.直到查找到该 key 值后对其赋值.

    • KVC提供了avg,sum,max,min,count 等函数,在可以直接使用

    KVC 的缺点

    • 由于 KVC 是通过 key 字符串进行属性的访问的,所以编译器无法检测说给的 key 值的正确性
    • KVC 的执行效率要比 setter 和 getter 方法的低,因为 KVC 要先解析说给的 key 值,然后才去访问对应的属性.

    KVC 的实现原理:

           KVC 首先根据传入的 anyKey(以此 key 为例)值去查找对象中是否含有anyKey的方法,找到了就直接使用,如果没有找到就继续查找是否含有anyKey的属性,找到的话直接使用,如果没有找到,则试图调用 setValueForUndefineKey,如果该方法没有实现,则会报错.

           注: KVC 查找anyKey的方法和属性的时候,不仅仅查找anyKey,还会查找 _anyKey , getAnyKey _getAnyKey

    KVO:

           Key value observing,键值监听,通俗点说就是当指定的对象的属性改变的时候,对象就会接到通知.也就是说,每次指定的对象发生改变的时候,对应的监听者就会接收到信息.

    KVO 的使用原理:

    KVO:键值监听.是 cocoa 框架实现的观察者模式,一般和 KVC 搭配使用.通过 KVO 可以监测一个值的变化.是一个一对多的关系,即一个值发生了变化,会通知所有的观察者.

    KVO 的使用方法:

    • 注册
    • 使用回调方法.
    • 移除观察者
  • 相关阅读:
    (原)Lazarus 异构平台下多层架构思路、DataSet转换核心代码
    (学)新版动态表单研发,阶段成果3
    (学) 如何将 Oracle 序列 重置 清零 How to reset an Oracle sequence
    (学)XtraReport WebService Print 报错
    (原)三星 i6410 刷机 短信 无法 保存 解决 办法
    (原) Devexpress 汉化包 制作工具、测试程序
    linux下网络配置
    apache自带ab.exe小工具使用小结
    Yii::app()用法小结
    PDO使用小结
  • 原文地址:https://www.cnblogs.com/xuan-yuan/p/5466908.html
Copyright © 2011-2022 走看看