IOS开发笔记之KVC与KVO的区别

键值编码KVC

可以利用字符串的方式去动态控制一个对象。其实由于OC的语言特性,你根部不必进行任何操作就可以进行属性的动态读写,这种方式就是Key Value Coding(简称KVC)。

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

动态设置:

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

动态读取:

  • valueForKey:属性名
  • valueForKeyPath:属性名(用于复合路径)

注意:

  • key的值必须正确,如果拼写错误,会出现异常
  • 当key的值是没有定义的,valueForUndefinedKey:这个方法会被调用,如果你自己写了这个方法,key的值出错就会调用到这里来
  • 因为类key反复嵌套,所以有个keyPath的概念,keyPath就是用.号来把一个一个key链接起来,这样就可以根据这个路径访问下去

键值监听KVO

KVO其实是一种观察者模式,利用它可以很容易实现视图组件和数据模型的分离,当数据模型的属性值改变之后作为监听器的视图组件就会被激发,激发时就会回调监听器自身。在ObjC中要实现KVO则必须实现NSKeyValueObServing协议,不过幸运的是NSObject已经实现了该协议,因此几乎所有的OC对象都可以使用KVO。

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

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

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

  • 通过addObserver: forKeyPath: options: context:为被监听对象(它通常是数据模型)注册监听器
  • 重写监听器的observeValueForKeyPath: ofObject: change: context:方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • KCV 其实由于ObjC的语言特性,你根部不必进行任何操作就可以进行属性的动态读写,这种方式就是Key Value...
    TYM阅读 1,070评论 0 4
  • kvc简述 kvc即键值编码,在iOS中的应用主要体现在开发者通过key访问对象的属性或给对象的属性赋值。这样做最...
    RunnerFL阅读 508评论 0 0
  • 由于Objective-C是基于Smalltalk进行设计的,所以它具有动态加载、动态绑定等特性。Key-valu...
    赵亦晨阅读 1,103评论 0 0
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,827评论 0 9
  • 今天高中同学儿子弥月之喜 下了班急匆匆把制服换掉 跟同学车去喝喜酒 中午吃饭时跟妈妈提起 又挨催谈恋爱 你同学都生...
    微木由阅读 225评论 0 0