如果接收器类符合NSKeyValueProtocol,可以选择很长的路要走:
[myInstance setValue:[NSNumber numberWithInt:2] forKey:@"integerProperty"];
或简短的方法:
myInstance.integerProperty = 2;
这种KVC方法的重点是什么?什么时候有用?
答案 0 :(得分:3)
首先,那些不一样,第二个应该是:
myInstance.integerProperty = [NSNumber numbwerWithInt:2];
如果integerProperty
是NSNumber
。
一般情况下,当你做大部分事情时,你会使用第二种形式。当您想要动态选择要存储内容的属性时,可以使用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:
来实现我们的函数,即使我们事先不知道密钥是什么,因为它是作为参数传递的。