KVC与KVO的区别
一.键值编码–KVC
KVC的操作方法由NSKeyValueCoding协议提供的,而NSObjct就实现了这个协议,也就是说objc中几乎所有的对象都支持KVC操作的,常用的KVC操作方法如下:
方法1:
//设置
//通过属性名(作为Key)为其赋值
- (void)setValue:(nullable id)value forKey:(NSString *)key;
//实例:通过姓名的作为key给self对象的name和age属性赋值
[self setValue:@"罗升强" forKey:@"name"];
[self setValue:@(22) forKey:@"age"];
方法2:
//复合路径赋值
- (id)valueForKeyPath:(NSString *)keyPath
//实例:self对象中拥有XJK类的属性money
[self setValue:@(10000) forKeyPath:@"money.number"];
方法3:字典转模型的时候使用的
- (void)setValuesForKeysWithDictionary:(NSDictionary<NSString *,id> *)keyedValues
以上的KVC的原理:
LSQStudent *stu = [[self alloc] init];
// [obj setValuesForKeysWithDictionary:dict];
[dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull value, BOOL * _Nonnull stop) {
// NSLog(@"%@--%@",key,value);
[stu setValue:value forKeyPath:key];
}];
方法4:通过KVC读取
- (nullable id)valueForKey:(NSString *)key;
- (nullable id)valueForKeyPath:(NSString *)keyPath;
//实例:
- (NSString *)description
{
//通过key读取value值
return [NSString stringWithFormat:@"%@,%@",[self valueForKey:@"name"],[self valueForKey:@"age"] ];
}
方法5:(很少使用,了解就可以了)
dictionaryWithValuesForKeys: 输入一组key,返回这组key的所有值;
- (NSDictionary<NSString *, id> *)dictionaryWithValuesForKeys:(NSArray<NSString *> *)keys;
注意:KVC的缺陷
点击一下链接进行跳转查看:KVC缺陷
二.键值监听–KVO
- 1.KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。
- 2.使用方法(具体查看本作者KVO的使用博客)
系统框架已经支持KVO,所以程序员在使用的时候非常简单。
- 注册,指定被观察者的属性,
- 实现回调方法
- 移除监听