Antwort

48

Während @weichsel korrekt ist, gibt es eine bessere Art und Weise.

Verwendung:

[anObject valueForKey: @"propertyName"]; 

und

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

Offensichtlich kann ein @"propertyName"NSString sein, die zur Laufzeit dynamisch zusammengesetzt ist.

Diese Technik wird Key Value Coding genannt und ist grundlegend für Kakao.

Warum das besser ist, ist, weil -valueForKey tun wird, was notwendig ist, um "box" egal welchen Typ die Eigenschaft in ein Objekt zurückgibt. Wenn die Eigenschaft vom Typ int ist, wird daher eine NSNumber Instanz zurückgegeben, die den int enthält.

Das ist viel einfacher zu handhaben - performSelector wird nur Arbeit für Typen, die passieren in einen Zeiger im Wert von Speicher passen.

Beachten Sie, dass es auch -setValue:forKey: gibt.

+0

Sehr praktisch! Wusste das nicht. –

2

@synthesize propertyName automatisiert die Generierung von Getter- und Setter-Methoden.

Der Compiler erzeugt

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

Wenn Sie einen Selektor als NSString haben, können Sie performSelector:NSSelectorFromString verwenden.
z.B .:
[object performSelector:NSSelectorFromString(@"propertyName") ...]

+1

Sie müssen 'performSelector: withObject:' verwenden, um die Eigenschaft festzulegen. –