KVC基础篇

作者: 黄龙辉 | 来源:发表于2015-09-13 12:31 被阅读249次

    键值编码(key-value coding)是一种间接更改对象状态的方式。通过传入的字符串(key)查找要更改的对象的状态。查找的规则是,先查找以字符串(key)命名的getter和setter方法。如果没有找到对应的方法,再查找key和_key的实例变量。

    1. KVC中基本调用的两个方法:
    • valueForKey:
      NSString *name = [self.studentModel valueForKey:@"name"];
    • setValue:forKey:
      [self.studentModel setValue:@"李四" forKey:@"name"];
    1. 对于标量值,会自动进行装箱和拆箱。
    2. 使用键路径:
    • valueForKeyPath:
      NSString *phone = [self.schoolModel valueForKeyPath:@"classModel.name"];
    • setValue:forKeyPath:
      [self.schoolModel setValue:@"初三五班" forKeyPath:@"classModel.name"];
    1. 对数组进行操作,会对数组的每个元素调用valueForKey:
      NSArray *gradeArray = [self.studentModel valueForKeyPath:@"scoreArray.grade"];
    2. 快速运算
    • 求个数
      NSNumber *count = [self.studentModel valueForKeyPath:@"scoreArray.@count"];
    • 求和:
      NSNumber *sum = [self.studentModel valueForKeyPath:@"scoreArray.@sum.grade"]
    • 求平均:
      NSNumber *avg = [self.studentModel valueForKeyPath:@"scoreArray.@avg.grade"];
    • 求并集,去掉重复元素:@distinctUnionOfObject
    1. 批量处理
    • setValuesForKeysWithDictionary:
      NSDictionary *newInfoDic = @{@"name":@"王五", @"phoneNumber":@"15123456789"}; [self.studentModel setValuesForKeysWithDictionary:newInfoDic];
    • dictionaryWithValuesForKeys:
      NSDictionary *dic = [self.studentModel dictionaryWithValuesForKeys:@[@"name", @"phoneNumber"]];
    1. 可以覆写setNilValueForKey:,定义传递nil时的处理方式:
      - (void)setNilValueForKey:(NSString *)key{ if ([key isEqualToString:@"name"]) { name = @"未填"; }else{ [super setNilValueForKey:key]; }}

    2. 可以通过覆写setValue:forUndefinedKey:,处理未定义键的处理方式。

    3. nil和[NSNull null]。在批量处理时,若值为nil,就会返回[NSNull null]。使用NSLog输出时,nil为(null),[NSNull null]为<null>。

    相关文章

      网友评论

        本文标题:KVC基础篇

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