Les Objective-C Runtime Reference listes
Ivar class_getInstanceVariable(Class cls, const char * name)
qui retourne un type opaque représentant une variable d'instance dans une classe. Vous passez ensuite à
id object_getIvar(id object, Ivar ivar)
pour obtenir la variable d'instance réelle. Donc vous pouvez dire
#import <objc/runtime.h>
id getInstanceVariable(id x, NSString * s)
{
Ivar ivar = class_getInstanceVariable([x class], [s UTF8String]);
return object_getIvar(x, ivar);
}
si la variable d'instance est un objet. Toutefois, si la variable d'instance n'est pas un objet, appelez
Ivar object_getInstanceVariable(id obj, const char * name, void ** outValue)
en passant dans un pointeur vers une variable du type droit. Par exemple, si la variable d'instance est un int,
int num;
object_getInstanceVariable(x, [s UTF8String], (void**)&num);
tournerai num
à la valeur de la variable d'instance entière.
En fait, object_getIvar prend un Ivar pour le second argument. – Casebash
Utilisez Ivar class_getInstanceVariable (classe cls, const char * nom) pour que l'Ivar puisse passer – Casebash
Tout à fait raison! +1 Casebash –