objective-c reflection key-value-coding declared-property

objective c - Acceda a la propiedad Objective-C dinĂ¡micamente con el nombre de la propiedad



reflection key-value-coding (2)

Si bien @weichsel es correcto, hay una mejor manera.

Utilizar:

[anObject valueForKey: @"propertyName"];

y

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

Obviamente, @"propertyName" puede ser un NSString compuesto dinámicamente en tiempo de ejecución.

Esta técnica se llama Key Value Coding y es fundamental para Cocoa.

La razón por la que esto es mejor es porque -valueForKey hará lo que sea necesario para " -valueForKey " cualquier tipo que la propiedad devuelva a un objeto. Por lo tanto, si la propiedad es de tipo int , devolverá una instancia de NSNumber contenga int.

Esto es mucho más fácil de manejar: performSelector solo funcionará para tipos que encajen en la memoria de un puntero.

Tenga en cuenta que también hay -setValue:forKey:

Sé el nombre de la cadena de una propiedad de un objeto. ¿Cómo podría obtener y configurar esa propiedad usando la cadena?


@synthesize propertyName automatiza la generación de métodos getter y setter.

El compilador genera

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

Si tiene un selector como NSString, puede usar performSelector:NSSelectorFromString .
p.ej:
[object performSelector:NSSelectorFromString(@"propertyName") ...]