Men的博客

欢迎光临!

0%

KVC和KVO

什么是KVC?
// Key Value Coding的简写, 称为键值编码
// 作用: 访问对象中属性的一种方式, 通过字符串为关键字访问属性

KVC的基本使用
// 问题: setValue:forUndefinedKey:

KeyPath的使用

// 4.常用方法
// setValuesForKeysWithDictionary:

//总结: 开发中常用
//1. setValuesForKeysWithDictionary方法
//2. 当对象没有对应属性出现错误怎么解决

//KVC常用用途把网络上字典转化为model
NSDictionary *dict = @{@”speed”:@(100),@”temp”:@”test”};
for(NSString *key in dict)
{
[car setValue:dict[key] forKey:key];
}

//设置car中engine对象的power属性
[car setValue:@(100) forKeyPath:@”engine.power”];

//把字典中各个属性的值赋给对象对应的属性或实例变量
[car setValuesForKeysWithDictionary:dict2];

什么是KVO

// Key Value Observing的简写, 键值监听
// 作用: 需要监视一个属性的变化, 变化了之后做出处理

KVO的基本使用

// 常用
// 项目监听一个属性的变化, 并在界面上显示, 使用KVO
// 实例: 监听和显示下载进度
//KVO
//效果: 当speed有了变化之后执行self中observeValueForKeyPath方法
[car addObserver:self forKeyPath:@”speed” options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil];
监听的实现
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
double newSpeed = [[object valueForKeyPath:keyPath] doubleValue];

NSLog(@”newSpeed = %f”,newSpeed);
}
程序完成的时候要移除监听
-(void)dealloc
{
//移除监听
//[car removeObserver:self forKeyPath:@”speed”];
}

KVC 与 KVO 是 Objective C 的关键概念,个人认为必须理解的东西,下面是实例讲解。
Key-Value Coding (KVC)
KVC,即是指 NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间接访问对象的属性。KVO 就是基于 KVC 实现的关键技术之一。
一个对象拥有某些属性。比如说,一个 Person 对象有一个 name 和一个 address 属性。以 KVC 说法,Person 对象分别有一个 value 对应他的 name 和 address 的 key。 key 只是一个字符串,它对应的值可以是任意类型的对象。从最基础的层次上看,KVC 有两个方法:一个是设置 key 的值,另一个是获取 key 的值。如下面的例子:

KVO这种编码方式使用起来很简单,很适用与datamodel修改后,引发的UIVIew的变化这种情况,就像上边的例子那样,当更改属性的值后,监听对象会立即得到通知。