有没有办法自动返回一个类中所有(公共)属性的 NSDictionary?您可以假设所有属性都是属性列表,并且我不想只交出指向类本身的指针。任何现有的魔法可以解决这个问题吗?
我知道我可以懒惰地实例化一个 NSDictionary 并用 getter 中的属性手动填充它。
有没有办法自动返回一个类中所有(公共)属性的 NSDictionary?您可以假设所有属性都是属性列表,并且我不想只交出指向类本身的指针。任何现有的魔法可以解决这个问题吗?
我知道我可以懒惰地实例化一个 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
. 这是一个可以编译的完整代码清单来演示这一点。
我不确定您是如何使用 的NSDictionary
,只是因为我不确定您期望键值对是什么。