我有一个.h文件,定义了几百个常量。我们假设这是其中之一:
#define KDSomeItem 1
我知道Objective-C运行时API可用于检索实例变量名称列表:如此问题中详述:How do I list all fields of an object in Objective-C?
我也知道getter [object valueForKey:theName]
可用于访问我之前的问题中的ivars:How to access a property/variable using a String holding its name
我的问题是可以用常数完成一些事情吗?那是我可以:
a)以编程方式获取所有常量的列表
b)如果我有一个名字
的字符串,则访问一个常量 e.g。如果我有这样的字符串NSString * theName = @"KDSomeItem";
我可以用这个字符串来评估我的常量吗?
答案 0 :(得分:1)
你将无法做到这一点:与实例变量不同,#define
- d常量在预处理器完成之后不会留下痕迹。它们不会留下任何元数据 - 即使在Objective C编译器正确分析代码之前,程序正文中KDSomeItem
的所有实例都将替换为1
。
如果您需要在运行时提供常量名称,则需要自己构建所有必需的元数据。为此,您可能需要查看预处理器的“stringizing”运算符:
#define STR(X) #X
此宏可以应用于预处理器常量,并生成一个C字符串文字,其名称为:
const char *nameOfKDSomeItem = STR(KDSomeItem); // same as "KDSomeItem"
答案 1 :(得分:0)
不。您的常量是预处理器宏。它以文本方式替换为您使用它的源代码。