gpt4 book ai didi

objective-c - 属性自省(introspection)以获取 Objective-C 中的变量

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:49 25 4
gpt4 key购买 nike

给定一个变量 id x 和一个字符串 NSString *s 我如何获取变量 x 的名称为 s 的实例属性?

即。如果我们写 NSString *s=@"a",那么我们想要 x.a

最佳答案

Objective-C Runtime Reference列表

Ivar class_getInstanceVariable(Class cls, const char * name)

返回一个不透明类型,表示类中的实例变量。然后你将它传递给

id object_getIvar(id object, Ivar ivar)

获取实际的实例变量。所以你可以说

#import <objc/runtime.h>

id getInstanceVariable(id x, NSString * s)
{
Ivar ivar = class_getInstanceVariable([x class], [s UTF8String]);
return object_getIvar(x, ivar);
}

如果实例变量是一个对象。但是,如果实例变量不是对象,则调用

Ivar object_getInstanceVariable(id obj, const char * name, void ** outValue)

传递一个指向正确类型变量的指针。例如,如果实例变量是一个 int,

int num;
object_getInstanceVariable(x, [s UTF8String], (void**)&num);

num设置为整型实例变量的值。

关于objective-c - 属性自省(introspection)以获取 Objective-C 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2084239/

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