在Objective-C中获取变量的属性自省
问题描述:
给定一个变量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