【发布时间】:2012-02-23 15:49:58
【问题描述】:
是否可以在不使用运行时方法的情况下以编程方式在 Objective-c 中获取对象的属性?我只是问,因为在运行时似乎没有必要检查它,而实际上它不会变化。 我正在考虑这样的事情:
MyObject *foo = [[MyObject alloc] init];
NSDictionary *propertiesNamesAndValues = [foo getAllProperties];
目前我的解决方案如下所示:
id currentClass = [MyObject class];
NSString *propertyName;
unsigned int outCount, i;
objc_property_t *properties = class_copyPropertyList(currentClass, &outCount);
for (i = 0; i < outCount; i++)
{
objc_property_t property = properties[i];
propertyName = [NSString stringWithCString:property_getName(property)];
NSLog(propertyName);
NSLog(@"%@",[foo valueForKey:propertyName]);
}
【问题讨论】:
-
所以你基本上想要一个名为
getAllProperties的代码的包装器?为什么不直接将该代码添加到NSObject的类别中? -
NSDictionary *propertiesNamesAndValues = [foo getAllProperties];将在运行时执行,就像您当前的解决方案一样。就像@mattjgalloway 所说,看起来您只是在询问是否可以将该功能封装在一个方法中,答案是肯定的。
标签: objective-c ios oop introspection