Joe*_*ssi 2 oop introspection objective-c ios
是否可以在不使用运行时方法的情况下以编程方式获取objective-c中对象的属性?我只是问,因为它似乎没有必要在运行时检查它,它什么时候不会改变.我正在考虑这个效果:
MyObject *foo = [[MyObject alloc] init];
NSDictionary *propertiesNamesAndValues = [foo getAllProperties];
Run Code Online (Sandbox Code Playgroud)
目前我的解决方案如下:
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]);
}
Run Code Online (Sandbox Code Playgroud)
简单的答案是否定的.
定义中的内省在运行时发生.此外,objective-c是高度动态的语言,几乎将所有内容都推迟到运行时.
在Objective-C中,你只是没有那么多的语法糖用于内省 - 你只需要普通的C运行时函数.
但是,没有什么能阻止你编写一些类别NSObject以提供更多的Objective-C'ish API,我想必须有一些已经在互联网上的开源实现.
| 归档时间: |
|
| 查看次数: |
1640 次 |
| 最近记录: |