2
有没有办法自动返回一个类的所有(公共)属性的NSDictionary?你可以假定所有的属性都是属性列表,我不想只是将指针交给类本身。任何现有的魔法都可以解决这个问题?把所有的对象属性放入一个NSDictionary或NSArray
我知道我可以懒惰实例化一个NSDictionary并手动使用getter中的属性填充它。
有没有办法自动返回一个类的所有(公共)属性的NSDictionary?你可以假定所有的属性都是属性列表,我不想只是将指针交给类本身。任何现有的魔法都可以解决这个问题?把所有的对象属性放入一个NSDictionary或NSArray
我知道我可以懒惰实例化一个NSDictionary并手动使用getter中的属性填充它。
使用Objective-C运行时中的class_copyPropertyList
和property_getName
函数很容易获得一组已声明的属性。这里有一个这样的实现:
- (NSArray *)properties
{
NSMutableArray *propList = [NSMutableArray array];
unsigned int numProps = 0;
unsigned int i = 0;
objc_property_t *props = class_copyPropertyList([TestClass class], &numProps);
for (i = 0; i < numProps; i++) {
NSString *prop = [NSString stringWithUTF8String:property_getName(props[i])];
[propList addObject:prop];
}
return [[propList copy] autorelease];
}
您可以将此作为方法添加到NSObject
的类别中。这是一个full code listing,可以编译,演示这一点。
我不确定你是怎么用NSDictionary
做的,只是因为我不确定你期望的键值对是什么。
请注意,如果属性具有分配的自定义getter,则这不一定正常工作。您需要使用[property_getAttributes](http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html#//apple_ref/doc/uid/TP40008048-CH101- SW6)查找每个属性是否以及是什么。 –
正是我在找什么,例外的答案。谢谢。 – Patrick
类似的问题:http://stackoverflow.com/questions/754824/get-an-object-attributes-list-in-objective-c 也一定要导入objective-c运行时 #import –
Patrick