美文网首页
KVC 和KVO讲解

KVC 和KVO讲解

作者: super_2e20 | 来源:发表于2018-03-21 14:36 被阅读0次

    KVC

    1.KVC: Key - value - coder 键值编码的简称

                    KVC对成员变量进行动态赋值
    

    (1)先去类中查找是否具有该变量的setter方法的声明和实现部分 如果具有直接调用setter方法对成员变量进行赋值
    (2)如果不具有 继续查找是否具有以该变量命名的成员变量 如果具有直接赋值
    (3)如果不具有 继续查找是否有以下划线开头以变量名命名的成员变量 如果有就赋值 如果不具有崩溃

        //KVC对成员变量使用setValue: forKey(path) :进行赋值
         [custom setValue:@"xuli" forKey:@"name"];
          [custom setValue:@(19) forKey:@"age"];
         //KVC 对成员变量进行获取使用的方法的是valueForkey(path):
    NSLog(@"%@,%d",[custom valueForKey:@"name"],[[custom valueForKey:@"age"] intValue]);
    

    2.kvo :key - value- observer缩写 键值观察者的简称

    主要用于观察 (成员变量)变化前和变化后的值
    使用范围:当APP第一次打开的时候 会从服务器获取所有数据存放在本地的内存中 当第二次启动APP的时候 APP的本地数据会和服务器上的数据进行比较 如果相同直接从本地读取 如果不同需要从服务器上重新下载并存储到本地 这个过程使用的就是KVO进行比较
    功能:能够提高APP的编译时间 节省用户的流量

    (1)添加观察者的对象指针 一般就是self
    (2)被观察的成员变量名称
    (3)获取的就是成员变量变化前和变化后的两个值 NSKeyValueObservingOptionNew NSKeyValueObservingOptionOld
    (4)一般时候默认设置为nil

     [boy addObserver:self forKeyPath:@"boyName" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew context:nil];
     [girl addObserver:self forKeyPath:@"girlName" options:NSKeyValueObservingOptionNew |NSKeyValueObservingOptionOld context:nil];
    
    
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
       /*
        1.被观察成员变量的名称
        2.成员变量的指针
        3.成员变量变化前后的值
     */
      UILabel * label1 = (UILabel *)[self.view viewWithTag:1];
      UILabel * label2 = (UILabel *)[self.view viewWithTag:2];
     if ([object isMemberOfClass:[boy class]]){
    
       label1.text = [NSString stringWithFormat:@"%@ %@",change[@"old"],change[@"new"]];
      }else{
    label2.text = [NSString stringWithFormat:@"%@ %@",change[@"old"],change[@"new"]];
      }
    }

    相关文章

      网友评论

          本文标题:KVC 和KVO讲解

          本文链接:https://www.haomeiwen.com/subject/sigbqftx.html