Access Objective-C property dynamically using the name of the property
I know the string name of a property of an object. How would I go about getting and开发者_JS百科 setting that property using the string?
While @weichsel is correct, there is a better way.
Use:
[anObject valueForKey: @"propertyName"];
and
[anObject setValue:value forKey:@"propertyName"];
Obviously, @"propertyName"
can be an NSString
that is dynamically composed at runtime.
This technique is called Key Value Coding and is fundamental to Cocoa.
Why this is better is because -valueForKey
will do what is necessary to "box" whatever type the property returns into an object. Thus, if the property is of type int
, it'll return an NSNumber
instance containing the int.
This is much easier to deal with -- performSelector
will only work for types that happen to fit into a pointer's worth of memory.
Note that there is also -setValue:forKey:
.
@synthesize propertyName
automates the generation of getter and setter methods.
The compiler generates
- (id)propertyName;
- (void)setPropertyName;
If you have a selector as NSString, you can use performSelector:NSSelectorFromString
.
e.g.:
[object performSelector:NSSelectorFromString(@"propertyName") ...]
精彩评论