kvc kvo

2015-12-13  本文已影响106人  娘亲Joanna
KVC 和 KVO
     [p setValue:@(668.0) forKey:@"money"];
[p setValue:@(110) forKeyPath:@"dog.price"];
[p setValue:@"lnj" forKey:@"_name"];
    [p setValuesForKeysWithDictionary:dict];
 - 注意点:
 1,模型需要和字典,个数,类型,名字对应,
 2. 只能对模型的当前属性,进行转换,如果模型里还有其他的对象的话,转换时不会报错,用到时会崩掉。
    NSString *dogName = [p valueForKeyPath:@"dog.name"];
NSDictionary *dict = [p dictionaryWithValuesForKeys:@[@"name", @"money"]];
NSArray *arr = @[p1, p2, p3];

 // 如果数组中的元素都是同一种类型的数据, 可以使用KVC获取数组中所有对象的某个属性的值
 NSArray *res = [arr valueForKeyPath:@"name"];
 id res1 = [arr valueForKeyPath:@"@avg.money"]

// keyPath: 被监听的属性名称
// object : 被监听的对象
// context: 注册监听的时候传入的值



####KVO的原理
- 只要给一个对象注册一个监听, 那么在运行时, 系统就会自动给该对象生成一个子类对象,
   并且重写自动生成的子类对象的被监听属性的set方法, 然后在set方法中通知监听者
   NSKVONotifying_Person 就是生成的子类
上一篇 下一篇

猜你喜欢

热点阅读