我有一个全球常数:
FOUNDATION_EXPORT NSString *const ENGModelItemText; // .h file
NSString *const XYZConstant1 = @"XYZConstant1"; // .m file
...我想创建指向XYZConstant2
的{{1}}。我认为这很简单:
XYZConstant1
我使用了NSString *const XYZConstant2 = &XYZConstant1
和*
,但无法正确使用。我想摆脱&
我现在使用的#define
。
答案 0 :(得分:1)
这是一个常量,所以编译时间。如果你想指出它,你不能用常数。
答案 1 :(得分:1)
您不能在C中创建这样的编译时别名(因此在ObjC中)。您可以通过在函数或方法中声明XYZConstant2
来创建运行时别名,但不能作为静态。比较这个纯C,它会产生同样的错误:
const char * const foo;
const char * const bar = foo;
(另见Compiler error: "initializer element is not a compile-time constant"。)
通常当需要这种别名时(通常是因为重命名了一个字符串常量),你使用#define
(就像我讨厌定义的那样)。
那就是说,你不应该依赖两个对象指针是同一个地址的事实,除非你的意思是“它是这个对象”而不是“它有这个值”。 (并且你永远不会对字符串意味着,因为字符串只有值。)写入语义,而不是实现细节。不要过早地优化比较。