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
= [wind
valueForKey:@"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
.
Get Objective-C Pocket Reference now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.