2010-01-18 43 views

回答

13

Objective-C Runtime Reference列出

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为整数实例变量的值。

+0

其实,object_getIvar花费的第二个参数的伊瓦。 – Casebash 2010-01-20 03:41:00

+2

使用Ivar class_getInstanceVariable(Class cls,const char * name)来让Ivar通过 – Casebash 2010-01-20 03:42:25

+0

非常正确! +1 Casebash – 2010-01-20 07:10:39

5

提供x是一个键值编码兼容的a属性,你可以这样做:

id result = [x valueForKey:s] 
+0

值得记住 – Casebash 2010-01-18 11:21:37