问题
There's the option to go the long way, if an receiver class conforms to the NSKeyValueProtocol:
[myInstance setValue:[NSNumber numberWithInt:2] forKey:@"integerProperty"];
or the short way:
myInstance.integerProperty = 2;
what's the point of this KVC method? When is this useful?
回答1:
First, those aren't the same, the second should be:
myInstance.integerProperty = [NSNumber numbwerWithInt:2];
if integerProperty
is an NSNumber
.
In general you use the second form when you are doing the most things. You use setValue:forKey:
and valueForKey:
when you want to dynamically choose the property to store things in. For instance, think about how valueForKeyPath:
against an NSArray
works (for reference, if you call -valueForKey:
against an NSArray
it will return an array where each object is the result of asking the corresponding object in that NSArray
for that value:
- (NSArray *) valueForKey:(id)key {
NSMutableArray *retval = [NSMutableArray array];
for (NSObject *object in self) {
[retval addObject:[object valueForKey:key]];
}
return retval;
}
In the above case we were able to use valueForKey:
to implement our function even though we do not know what the key is beforehand, since it is passed in as an argument.
来源:https://stackoverflow.com/questions/1164014/why-should-i-use-kvc-rather-than-the-simple-dot-syntax-when-accessing-object-pro