Since Objective-C 2.0, we've had @properties and autogenerated accessor methods. So today, what is the point of key-value coding? Under what circumstances is it preferable to write

[myObject setValue:foo forKey:@"bar"];

instead of writing

[myObject setBar:foo];

or even

myObject.bar = foo;

I keep seeing articles and documentation making use of KVC, but always in a way where it seems like simply using properties would be better. So why would I ever use KVC? Thanks for any and all insight.

Edit
Report