是否可以使用id访问对象的所有属性?

时间:2011-08-24 04:15:47

标签: iphone cocoa-touch cocoa

我有一个Object:aObject,它有属性a,b,c。

我可以使用以下方式访问属性:

aObject.a

aObject.b

aObject.c

是否可以使用id访问对象的所有属性?比如

[aObject indexOf:0]
[aObject indexOf:1]
[aObject indexOf:2]

或类似的东西。

欢迎任何评论

2 个答案:

答案 0 :(得分:2)

即使我从未使用它,似乎可以使用class_copyPropertyList方法。

答案 1 :(得分:1)

KVC(键值编码)允许您使用方法[anObject setValue:aValue forKey:@"a"]设置属性值。

如果您真的想要遍历每个属性,设置其值,那么您将需要下拉到objective-c运行时。

unsigned int outCount, i;
objc_property_t *properties = class_copyPropertyList([anObject class], &outCount);
for (i = 0; i < outCount; i++) {
    objc_property_t property = properties[i];
    const char * name = property_getName(property);

    [anObject setValue:anyValue forKey:[NSString stringWithUTF8String:name]];
}
free(properties);