Key-Value Coding
Objective-C lets you call methods specified by variables at runtime using
the selector mechanism. Key-value coding is a library facility that puts
field access on the same dynamic footing: you can access an object’s
fields by naming them. For example, you could use the following code to
retrieve the parent field of a window
object:
Window*parentWind= [windvalueForKey:@"parent"];
Because you can pass a string variable to -valueForKey : as well as a literal value, this is another way your
program’s behavior can vary based on values that aren’t known until
runtime.
NSObject implements -valueForKey: method as part of the NSKeyValueCoding category, which declares methods for reading from and
writing to the fields of objects. These methods store and retrieve
Objective-C objects, so their primary use is in accessing objects.
However, even if your fields are integers or other numeric types, you
can still use key-value coding to retrieve and set them. The methods
will take NSNumber objects and
automatically convert them to set numeric fields, and return NSNumber objects when you read numeric
fields.
Access Permissions
The key-value methods can bypass the access modifiers of the
static language: you can read and write to private fields as easily as to public ones. This might
seem like a violation of the object’s declared interface. However, you
can prevent key-value methods from bypassing your access modifiers by
overriding +accessInstanceVariablesDirectly to return NO.