将所有对象属性放入NSDictionary或NSArray中

Pat*_*ick 2 iphone properties objective-c nsdictionary ios

有没有办法自动返回类中所有(公共)属性的NSDictionary?您可以假设所有属性都是属性列表,并且我不想只是将指针移交给类本身.任何现有的魔法可以解决这个问题?

我知道我可以懒惰地实例化一个NSDictionary并手动用getter中的属性填充它.

mip*_*adi 7

使用Objective-C运行时中的class_copyPropertyListproperty_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];
}
Run Code Online (Sandbox Code Playgroud)

您可以将其添加为类别中的方法NSObject.这是一个完整的代码清单,可以编译来演示这一点.

我不知道你是怎么做的NSDictionary,只是因为我不确定你对键值对的期望是什么.