iOS开发 - KVO/KVC

KVC
//KVC 键值编码
[dog setValue:@”小强” forKey:@”name”];
NSLog(@”%@”,[dog valueForKey:@”name”]);
//把属性的名字和key对应起来/映射的形式进行访问

//KVC 是对NSObject扩展的一个类别
//- (void)setValue:(nullable id)value forKey:(NSString *)key;是类别里的一个方法
//父类扩展的类别,子类也同样拥有了这个类别,所有的对象度可以使用KVC的方式访问属性

//依据KVC的方式 给每个属性进行赋值 前提是对象的属性的名字和字典里的key值名字相同
[dog setValuesForKeysWithDictionary:dic];

//当字典内有key值和属性的名字对应不上的时候,会自动调用这个方法
//需要重写此方法
- (void)setValue:(id)value forUndefinedKey:(NSString *)key{

//key 字典里对应不上的key值
if ([key isEqualToString:@"性别"]) {
    //value 字典里key对应的value
    self.sex = value;}

}

KVO
//注册
//person就是被观察的对象
//第一个参数 观察者(对person的某个属性感兴趣的那个对象)
//第二个参数 被观察者的属性
//第三个参数 对新值还是旧值进行观察
[self.person addObserver:self forKeyPath:@”sex” options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
/*
NSKeyValueObservingOptionNew = 0x01,
NSKeyValueObservingOptionOld = 0x02,
*/

//一旦被观察者的属性发生变化 观察者就会自动调用这个方法
-(void)observeValueForKeyPath:(NSString )keyPath ofObject:(id)object change:(NSDictionary )change context:(void *)context{
//keyPath 被观察的属性
//object 被观察者
//change 改变前后属性的值都可以通过这个字典拿到
// change[@”new”] 新值
// change[@”old”] 旧值

if ([object isKindOfClass:[Person class]]) {

    if (![change[@"new"] isEqualToString:change[@"old"]]) {
    NSLog(@"..");
    }
}
if ([object isKindOfClass:[UIView class]]) {

    UIColor * color = change[@"new"];

    NSLog(@"%@",color);
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值