2012-08-24 55 views
1

我有一个.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

我的问题是可以用常量做类似的事情吗?这就是我可以:

一)获得所有的常量列表编程

b)获得恒定的,如果我有一个串保持它的名字

例如如果我有这样一个字符串NSString * theName = @"KDSomeItem";我可以使用这个字符串评估我的常量吗?

回答

1

您将无法执行此操作:与实例变量不同,#define -d常量在预处理器完成后不会留下痕迹。他们没有留下元数据 - 甚至在Objective C编译器正确分析代码之前,程序主体中的所有KDSomeItem实例都将替换为1

如果您需要在运行时提供常量名称,则需要自己构建所有必需的元数据。为了做到这一点,你可能会想看看预处理器的“字符串化”运营商:

#define STR(X) #X 

这个宏可以应用到一个预处理器常量,并产生一个C字符串字面它的名字:

const char *nameOfKDSomeItem = STR(KDSomeItem); // same as "KDSomeItem" 
+0

谢谢,这解释了它。我必须等待几分钟才能接受答案;-) –

0

没有。你的常量是一个预处理宏。它在文本上被替换到您使用它的源代码中。

相关问题