由于Objective-C是基于Smalltalk进行设计的,所以它具有动态加载、动态绑定等特性。Key-value coding (KVC) 和 key-value observing (KVO) 是两种能让我们驾驭 Objective-C 动态特性并简化代码的机制。

1.KVC

在ObjC的编程中,我们习惯于通过属性的set和get方法来对属性的值进行读写,其实由于ObjC的语言特性,你根本不必进行任何操作就可以进行属性的动态读写,这种方式就是Key Value Coding(简称KVC)。

KVC的操作方法由NSKeyValueCoding协议提供,而NSObject就实现了这个协议,也就是说OC中几乎所有的对象都支持KVC操作,常用的KVC操作方法如下:

  • 写方法:setValue:属性值 forKey:属性名(用于简单路径)、setValue:属性值 forKeyPath:属性路径(用于复合路径,例如Person有一个Account类型的属性,那么person.account就是一个复合属性)
  • 读方法:valueForKey:属性名 (简单路径)、valueForKeyPath:属性名(复合路径).

2.KVO

在如今比较流行的MVVM设计模式中,需要有一种双向绑定的机制,在数据模型发生了修改之后立即将改变呈现到UI视图上去。OC中原生的就支持这么 一种机制,那就是Key Value Observing(简称KVO)。KVO其实是一种观察者模式,利用它可以很容易实现视图组件和数据模型的分离,当数据模型的属性值改变之后作为监听器 的视图组件就会被激发,激发时就会回调监听器自身。在ObjC中要实现KVO则必须实现NSKeyValueObServing协议,不过幸运的是 NSObject已经实现了该协议,因此几乎所有的ObjC对象都可以使用KVO。

在ObjC中使用KVO操作常用的方法如下:

  • 注册指定Key路径的监听器: addObserver: forKeyPath: options:  context:
  • 删除指定Key路径的监听器: removeObserver: forKeyPath、removeObserver: forKeyPath: context:
  • 回调监听: observeValueForKeyPath: ofObject: change: context:

KVO的使用步骤也比较简单:

  1. 通过addObserver: forKeyPath: options: context:为被监听对象(它通常是数据模型)注册监听器
  2. 重写监听器的observeValueForKeyPath: ofObject: change: context:方法

只有通过setter或KVC修改的属性值,才会调用observeValueForKeyPath:方法,通过其他方式修改属性值并不能通知监听者。

最新文章

  1. 跨站请求伪造 CSRF / XSRF<二:应用>
  2. 【Alpha版本】 第九天 11.17
  3. OC-ARC
  4. JS实现类似网页的测试考卷
  5. MyBatis3.1 学习教程
  6. setClickable(false)问题处理
  7. java--多线程之前台幕后
  8. android设置eclipse中的自动提示功能
  9. MySQL Study之--Mysql无法启动“mysql.host”
  10. GUI线程 :打字母游戏
  11. Xamarin android使用Sqlite做本地存储数据库
  12. setsockopt()用法(参数详细说明) recv、send的超时处理
  13. 使用mybatis操作AS400数据库
  14. WebSocket的Tomcat实现
  15. 接口与继承:方法覆盖(super)
  16. 金蝶k3密码批量修改
  17. BZOJ.3811.玛里苟斯(线性基)
  18. EditPlus 自用正则替换
  19. es2017新特性
  20. 如何高效的使用-Notepad++

热门文章

  1. Swing 窗口的最小化到系统图标与还原
  2. 使用Linux自定义自动补全命令完善自己的shell脚本
  3. C语言strstr()函数:返回字符串中首次出现子串的地址
  4. js原生设计模式——7原型模式之真正的原型模式——对象复制封装
  5. 【MySQL】容器集群支持数据库实践
  6. 关于ExtJS必输框,多选项
  7. 批量转换引擎为innodb
  8. eclipse xml自动提示
  9. HoloLens开发手记 - 开始使用Vuforia Getting started with Vuforia
  10. Ubuntu14.04 安装Oracle JDK