使用属性的名称动态访问Objective-C属性

时间:2009-12-28 15:08:38

标签: objective-c reflection key-value-coding declared-property

我知道对象属性的字符串名称。我如何使用字符串获取和设置该属性?

2 个答案:

答案 0 :(得分:51)

虽然@weichsel是正确的,但还有更好的方法。

使用:

[anObject valueForKey: @"propertyName"];

[anObject setValue:value forKey:@"propertyName"];

显然,@"propertyName"可以是在运行时动态组合的NSString

这种技术称为Key Value Coding,是Cocoa的基础。

为什么这样做更好是因为-valueForKey将执行必要的操作以“阻止”属性返回到对象的任何类型。因此,如果属性的类型为int,则它将返回包含int的NSNumber实例。

这更易于处理 - performSelector 适用于发生的类型,以适应指针的内存价值。

请注意,还有-setValue:forKey:

答案 1 :(得分:2)

@synthesize propertyName自动生成getter和setter方法。

编译器生成

  • - (id)propertyName;
  • - (void)setPropertyName;

如果你有一个选择器作为NSString,你可以使用performSelector:NSSelectorFromString 例如: -
[object performSelector:NSSelectorFromString(@"propertyName") ...]