KVC 与 KVO

KVC 与 KVO 是 Objective C 的关键概念

Key-Value Coding (KVC)

KVC,即是指 NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间接访问对象的属性。而不是通过调用Setter、Getter方法访问。KVO 就是基于 KVC 实现的关键技术之一。
kvc(key-value-coding,键值编码)
为属性赋值:value 为属性的值 forKey:属性的名称
kvc 为OC语言动态运行时机制的一种体现,任何NSObject类型的对象都支持kvc

KVC的常用方法:

- (id)valueForKey:(NSString *)key;
- (void)setValue:(id)value forKey:(NSString *)key;

valueForKey的方法根据key的值读取对象的属性,setValue:forKey:是根据key的值来写对象的属性。

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

Key-Value Observing (KVO)

KVO,建立在 KVC 之上,它能够观察一个对象的 KVC key path 值的变化。
kvo(键值观察)(key-value-observer):对符合kvc键值编码的变量的观察,主要对变量赋值操作的观察
注册self 为_teacher中teacherName属性的观察者,一旦外部有对teacherName的赋值操作,self都能观察到,并触发特定的方法
_teacher 被观察的对象;addObserver:观察者;forKeyPath:属性的名称;NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld 对变量新旧值的观察
这是一个典型的观察者模式,观察者在键值改变时会得到通知。iOS中有个Notification的机制,也可以获得通知,但这个机制需要有个Center,相比之下KVO更加简洁而直接。

KVO的使用也很简单,就是简单的3步。

1.注册需要观察的对象的属性
被观察者 addObserver:观察者 forKeyPath:观察者的什么属性(使用kvc get方式) context:固定写法,nil
addObserver:forKeyPath:options:context:
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
这个方法当观察的属性变化时会自动调用
3.删除观察者,一般在dealloc当中使用
removeObserver:forKeyPath:context:

* 使用KVO时,遇到可变数组、可变集合,需要在设置数组元素时,使用mutableArrayValueForKeyPath方法,将数组读出来

KVO的优点:

当 有属性改变,KVO会提供自动的消息通知。这样的架构有很多好处。首先,开发人员不需要自己去实现这样的方案:每次属性改变了就发送消息通知。这是KVO 机制提供的最大的优点。因为这个方案已经被明确定义,获得框架级支持,可以方便地采用。开发人员不需要添加任何代码,不需要设计自己的观察者模型,直接可 以在工程里使用。其次,KVO的架构非常的强大,可以很容易的支持多个观察者观察同一个属性,以及相关的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值