Справочник по времени выполнения Objective C 1002 * списки
Ivar class_getInstanceVariable(Class cls, const char * name)
, который возвращает непрозрачный тип, представляющий переменную экземпляра в классе. Затем вы передаете это
id object_getIvar(id object, Ivar ivar)
чтобы получить фактическую переменную экземпляра. Так что вы могли бы сказать
#import <objc/runtime.h>
id getInstanceVariable(id x, NSString * s)
{
Ivar ivar = class_getInstanceVariable([x class], [s UTF8String]);
return object_getIvar(x, ivar);
}
если переменная экземпляра является объектом. Однако, если переменная экземпляра не является объектом, вызовите
Ivar object_getInstanceVariable(id obj, const char * name, void ** outValue)
передача указателя на переменную правильного типа. Например, если переменная экземпляра является int,
int num;
object_getInstanceVariable(x, [s UTF8String], (void**)&num);
установит num
в значение целочисленной переменной экземпляра.