KVC与KVO详细介绍

第一、KVO

/**
    KVO-----Key-Value Observing即键值监听当指定对象的某个属性发生改变时,对象就会接收到通知。
    KVO与通知的区别:前者是被观察者向观察者发送通知,后者是一个中心对象诶所有观察者提供变更通知
 */

/**
    - (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void *)context;
 
    observe  观察者
    keyPath  监听的属性
    option   获得属性的值
 
 */

/**
    添加观察者后要实现的方法
    keyPath  监听的属性
    change   属性改变后的值
 */
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
    if ([keyPath isEqualToString:@"text"]) {
         NSLog(@"%@--%@",[change objectForKey:@"old"],[change objectForKey:@"new"]);
    }
}

/**
    移除观察者,这一步必须要做。(添加观察者和移除观察者必须成对存在)
 */
-(void)dealloc{
    [self.KVO_Lable removeObserver:self forKeyPath:@"text"];
}
第二、KVC

#pragma mark --- KVC 
/**
    KVC:Key-Value Coding,即键值编码,我们可以动态设置对象的属性的值。
    如果动态设置属性,系统优先调用setter方法,如果没有实现setter方法则优先搜索成员变量即_属性,如果仍然找不到的话直接搜索成员变量属性,最后仍然搜不到的话调用setValue:forUndefineKey方法
    如果是动态读取属性,则优先考虑getter方法,如果没有实现getter方法则优先搜索成员变量_属性,如果仍然不存在的话直接搜索成员变量属性,最后仍然搜索不到则会调用valueforUndefinedKey:方法。
    
    注意:搜索过程中不管这些方法、成员变量是私有还是公共的都可以被读取,不会因为是私有而导致失败
 
    value属性值   keyPath复合路径
    - (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;
    value属性值   key简单路径
    - (void)setValue:(nullable id)value forKey:(NSString *)key;
    复合路径与简单路径的区别:简单路径只有一层(这个人的名字属性),而复合路径多层(这个人的狗属性,狗仍然有名字属性)。
 */

代码传送门: https://github.com/fuzongjian/KVOKVC.git

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值