Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why should I use KVC rather than the simple dot syntax when accessing object properties?

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?

like image 493
Thanks Avatar asked Nov 22 '25 01:11

Thanks


1 Answers

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.

like image 127
Louis Gerbarg Avatar answered Nov 23 '25 20:11

Louis Gerbarg



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!