KVO和KVC的区别

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,所以程序员在使用的时候非常简单。
    • 注册,指定被观察者的属性,
    • 实现回调方法
    • 移除监听
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值