iOS KVC和KVO

来源:互联网 发布:mac怎样删除文件 编辑:程序博客网 时间:2024/06/10 15:19

KVO:Key Value Observing, 键值监听, KVO提供了一种观察属性改变的机制, 一旦当某个属性改变了, 通过KVO观察到这种改变。

KVC- Key Value Coding 缩写
键值编码
作用: 提供了一种使用字符串作为关键字访问属性的机制

demo:

-(void)testKVO
{

//  KVO的基本使用(注意事项)//  实例: 实现汽车的速度显示器//  如何实现:   当速度改变之后, 显示器同步显示//  项目中:    显示下载进度, 知道下载进度的更新car = [[Car alloc] init];car.speed = 0;  //初始速度//如何监听属性变化---使用KVO//参数1: 有谁处理变化 self//参数2: 监听哪个属性的变化//参数3: 监听的选项[car addObserver:self forKeyPath:@"speed" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];//启动汽车car.speed = 10;car.speed = 20;//  KVO的原理//  如果想给car类添加监听, 创建car类的子类, 重写car类setter方法, 一旦setter被调用的时候, 执行KVO对应的事件处理方法//  kvo只有在通过setter修改属性的才有有效的

}

-(void)dealloc
{
//KVO监听结束之后必须移除监听, 否则会造成内存问题
[car removeObserver:self forKeyPath:@”speed”];
}

-(void)observeValueForKeyPath:(NSString )keyPath ofObject:(id)object change:(NSDictionary )change context:(void *)context
{
NSLog(@”当前的速度是 %@”,[object valueForKeyPath:keyPath]);
}

-(void)testKVC
{

//  1.2 实例 Car类//使用Car第一种方式car = [[Car alloc] init];car.type = @"BMW";car.speed = 200.0;NSLog(@"type = %@, speed=%f",car.type,car.speed);//使用KVC访问[car setValue:@"Benz" forKey:@"typec"];NSLog(@"type = %@, speed=%f",car.type,car.speed);//KVC最常用    把字典中得数据转化为modelNSDictionary *dict = @{@"type":@"QQ",@"speed":@150};Car *newCar = [[Car alloc] init];for (NSString *key in dict) {    //KVC的使用    [newCar setValue:dict[key] forKey:key];}NSLog(@"new car type = %@",newCar.type);//最常用的//作用: 把字典中每个键值对的数据赋值给对象中对应的属性[newCar setValuesForKeysWithDictionary:dict];//keyPath的使用//  遇到的情况: KVC操作的对象是多层的Engine *engine = [[Engine alloc] init];engine.power = 10;car.engine = engine;//需求: 利用kvc把car对象的engine对象的power设置为20//解决: 使用KeyPath[car setValue:@20 forKeyPath:@"engine.power"];//获取powerNSNumber *num = [car valueForKeyPath:@"engine.power"];NSLog(@"power = %f",num.doubleValue);

}

0 0
原创粉丝点击