2010-01-18 40 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