KVC基础篇

键值编码(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:@"[email protected]"]
  • 求平均:
    NSNumber *avg = [self.studentModel valueForKeyPath:@"[email protected]"];
  • 求并集,去掉重复元素:@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]为

你可能感兴趣的:(KVC基础篇)