gpt4 book ai didi

objective-c - Objective-C 对象属性的自省(introspection)

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:33:07 25 4
gpt4 key购买 nike

是否可以在不使用运行时方法的情况下以编程方式获取 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]);
}

最佳答案

简单的回答是

根据定义,内省(introspection)发生在运行时。此外,Objective-c 是一种高度动态的语言,几乎可以将所有内容推迟到运行时。

在 Objective-C 中,您只是没有那么多用于自省(introspection)的语法糖 - 您只有纯 C 运行时函数。

但是,没有什么能阻止您在 NSObject 上编写一些类别以提供更多 Objective-C'ish API,我猜互联网上一定已经有一些开源实现。

关于objective-c - Objective-C 对象属性的自省(introspection),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9087802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com