理解KVC&KVO

一、Key Value Coding 协议

Key Value Coding是cocoa的一个基本组成部分。
KVC的操作方法都是由NSKeyValueCoding协议提供,而NSObject实现了这个协议,所以几乎所有的对象都支持KVC操作。

通过KVC调用对象访问对象的属性时,如:[self valueForKey:@"key"]执行的步骤

1.首先会查找对象是否带有key属性的set方法,如果没有找到
2.继续查找对象是否带有key这个实例变量,如果没有找到
3.调用方法-(id) valueForUndefinedKey:和setValue: forUndefinedKey:这些方法的默认实现都是抛出一个NSUndefinedKeyEXception异常错误,根据需要重写它们

什么是键-值,什么是键路径

键:一个字符串,与模型的属性名相同
值:模型的属性对应的值
键值路径:是一个用点作分隔符的键组成的字符串。通过键路径可以指定对象的任意深度的路径,使其指向相关对象的特定属性如"person.age"

KVC常用操作方法
动态设置:

setValue:属性值 forKey 属性名
setValue:属性值 forKeyPath:属性路径(用于复合路径,person.account)

动态取值

valueForKey:属性名
valueForKeyPath:属性名

字典转模型 常用到的方法

setValuesForKeysWithDictionary:
这个方法会依次调用字典中的键值对,进行赋值, 每找到一个属性,就会带调用另一个方法
setValue:属性值 forKey属性名
如果找不到对应的属性,会调用
setValue: forUndefinedKey:  
默认这个方法是返回一个异常错误,需要重写这个方法,执行操作

二、KVO

什么是KVO

Key Value Observing ,它是一种观察者模式,用于监听属性的变化,相应的objects会被通知。

实现方式

KVO是通过OC的运行时实现的,当第一次观察某个object时,
runtime会创建一个新的继承自object对应类的派生类,在这个新的子类中,
它重写了setter方法(方法内添加通知机制),系统将object的isa指针指向这个派生类,
这个object对象就被巧妙的成为了该派生类的对象,
因此调用对象的setter方法的时候就会调用重写的setter方法,从而激活了键值通知机制。
此外,派生类还重写了dealloc方法释放资源。

KVO中的方法及使用

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在编程中,最常见的就是程序的流程取决于你所使用的各种变量和属性的值,根据变量和属性的值确定后面运行的代码,有时会检...
    pro648阅读 1,680评论 2 27
  • 一、是什么 KVC(Key-value coding)键值编码,通过一个Key来访问一个对象的属性 常用方法 Fo...
    快乐的tomato阅读 281评论 0 1
  • KVC/KVO 概念 KVC : 即 Key-Value-Coding,用于键值编码。作为 cocoa 的一个标准...
    满脸胡茬的小码农阅读 2,005评论 2 8
  • 不知不觉好像就到了要面对分别的年纪。 正在上课,看到妈妈的微信,短短几个字却让我懵在了那里,你婆今天早上3.30去...
    slow_暖风阅读 357评论 0 1
  • 安装之后: 首先要做的就是安装Chorme,但是一定要下载正版的。怎么下载自己去找。 然后要具备某些上网能力。这是...
    Ang_SS阅读 152评论 0 0