KVC,KVO

来源:互联网 发布:cntv中国网络电视台5 编辑:程序博客网 时间:2024/06/05 08:27

KVC Key Value Coding 键值编码,以字符串作为key, 访问对象属性的一种方式

KVC作用:

    1)动态地访问特性:现在有许多字母,我们要统计某个字母有没有出现。这些字母被存储在一个NSArray里,遍历Array,当遇到"a"这个字母时,就将一个名为"a"的属性设为@"yes":[self setValue:@"yes" forKey:s];

    2)处理多层嵌套的属性

    Engine *e = [[Engine allocinit];

    e.power = 1000000;

    car.engine = e;

    //修改power

    [car setValue:@(2000000) forKeyPath:@"engine.power"];

    3)字典转化为对象

    NSDictionary *dict = @{@"type":@"dongfeng",@"speed":@(20000)};

    Car *newCar = [[Car allocinit];

    [newCar setValuesForKeysWithDictionary:dict];

    NSLog(@"%@ %f",newCar.type,newCar.speed);

     4)取值:

    [car valueForKey:@"type"]

     5)它可以支持KVO

KVO:键值监听,即Key-Value Observation,即监视属性的变化并进行一些操作。

作用:汽车显示频显示当前车的速度,实时监控, 车速一旦变化, 立马显示

用法:

添加监听:

[newCar addObserver:self forKeyPath:@"speed" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil];

//参数1: 表示哪个属性改变了

//参数2: 哪个对象的属性改变了

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

{

    double speed = [[object valueForKeyPath:keyPath] doubleValue];

    NSLog(@"speed = %f",speed);

}

//释放

-(void)dealloc{

    [newCar removeObserver:self forKeyPath:@"speed"];

}



0 0
原创粉丝点击