給定一個變量id x
和一個字符串NSString *s
如何獲取變量x的名稱爲s的實例屬性?在Objective-C中獲取變量的屬性自省
即。如果我們寫NSString *[email protected]"a"
,那麼我們希望x.a
給定一個變量id x
和一個字符串NSString *s
如何獲取變量x的名稱爲s的實例屬性?在Objective-C中獲取變量的屬性自省
即。如果我們寫NSString *[email protected]"a"
,那麼我們希望x.a
的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
爲整數實例變量的值。
其實,object_getIvar花費的第二個參數的伊瓦。 – Casebash 2010-01-20 03:41:00
使用Ivar class_getInstanceVariable(Class cls,const char * name)來讓Ivar通過 – Casebash 2010-01-20 03:42:25
非常正確! +1 Casebash – 2010-01-20 07:10:39