在访问对象属性时,为什么要使用KVC而不是简单的点语法?

时间:2009-07-22 09:06:31

标签: iphone cocoa-touch uikit key-value-coding

如果接收器类符合NSKeyValueProtocol,可以选择很长的路要走:

[myInstance setValue:[NSNumber numberWithInt:2] forKey:@"integerProperty"];

或简短的方法:

myInstance.integerProperty = 2;

这种KVC方法的重点是什么?什么时候有用?

1 个答案:

答案 0 :(得分:3)

首先,那些不一样,第二个应该是:

myInstance.integerProperty = [NSNumber numbwerWithInt:2];

如果integerPropertyNSNumber

一般情况下,当你做大部分事情时,你会使用第二种形式。当您想要动态选择要存储内容的属性时,可以使用setValue:forKey:valueForKey:。例如,考虑valueForKeyPath:NSArray的工作原理(供参考,如果你针对-valueForKey:调用NSArray它将返回一个数组,其中每个对象都是在该NSArray中询问该值的相应对象的结果:

- (NSArray *) valueForKey:(id)key {
  NSMutableArray *retval = [NSMutableArray array];

  for (NSObject *object in self) {
    [retval addObject:[object valueForKey:key]];
  }

  return retval;
}

在上面的例子中,我们能够使用valueForKey:来实现我们的函数,即使我们事先不知道密钥是什么,因为它是作为参数传递的。