KVC 与 KVO
什么是KVC —>What
KVC指的就是NSKeyValueCoding⾮非正式协议。 KVC是⼀一种间接地访问对象的属性的机制。
这种间接表现在通过字符串来标识属性,⽽而不是通过调⽤用存取⽅方法或直接地访问实例变量的⽅方
式。KVC机制不仅⽀支持对象,还⽀支持标量和结构体类型,这些⾮非对象的类型会被⾃自动的装箱和开 箱。
Key & Key Path键(Key)是⼀一个字符串⽤用来标识对象⾥里⾯面的⼀一个指定的属性。⼀一般⼀一个键对应对象的存取⽅方法或 实例变量。键必须是ASCII码,⼀一般以⼩小写字⺟母开始,不能包含空格。
键路径(Key Path)是⼀一个由点进⾏行分割的⼀一系列键组成的字符串
KVC的使用
- (void)setValue:(id)value forKey:(NSString *)key
- (id)valueForKey:(NSString *)key
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath
- (id)valueForKeyPath:(NSString *)keyPath
- (id)valueForUnderfinedKey:(NSString *)key
- (void)setNilValueForKey:(NSString *)key
注意:
KVC与点语法是正交的,也就是⼀一点关系都没有
The accessor patterns are written in the form -set(key):or-(key)
KVC在集合中的使用
```
@avg
NSNumber *transactionAverage = [transactions valueForKeyPath:@"@avg.amount"];
@count
NSNumber *numberOfTransactions = [transactions valueForKeyPath:@"@count"];
@max
NSDate *latestDate = [transactions valueForKeyPath:@"@max.date"];
@min
NSDate *earliestDate = [transactions valueForKeyPath:@"@min.date"];
@sun
NSNumber *amountSum = [transactions valueForKeyPath:@"@sum.amount"];
```
什么是KVO
键值观察(Key-value observing)是⼀一种机制。这种机制允许当⼀一个对象的某些属性的值被修改后
会通知另外观察该变化的对象。常⽤用于MVC中Model与Controller之间的通信。如何使⽤用KVO
- 注册,指定被观察者的属性
- 实现回调⽅方法
- 移除观察
常⽤用⽅方法及数据类型说明
// 添加监听对象,并指指定监听的keyPath,以及监听哪些值的变化 - (void)addObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context options参数: 1. NSKeyValueObservingOptionNew 属性变化的时候, 只会通知新的值 2. NSKeyValueObservingOptionOld 属性变化的时候,只会通知旧的数据值  3. NSKeyValueObservingOptionInitial 当调⽤用添加监听的⽅方法时候,回调⽅方法⽴立即调⽤用,通知初始值 4. NSKeyValueObservingOptionPrior 取代单次通知,在值变化前和变化后都会调⽤用,⽐比如设置old后,不单单只通知⼀一次, 变化前后会通知两次。 // 移除指定键路径的观察者对象  -(void)removeObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath // 当监听的属性发⽣生变化后会调⽤用此⽅方法,根据监听option的设置,change的值会存储对应的值  - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
注意:必须⽤用set⽅方法, 或者KVC的⽅方法修改属性的值,才会引起KVO通知