NSString常量指针指向常量指针

时间:2012-10-09 13:41:32

标签: objective-c pointers constants

我有一个全球常数:

FOUNDATION_EXPORT NSString *const ENGModelItemText; // .h file
NSString *const XYZConstant1 = @"XYZConstant1"; // .m file

...我想创建指向XYZConstant2的{​​{1}}。我认为这很简单:

XYZConstant1

我使用了NSString *const XYZConstant2 = &XYZConstant1 *,但无法正确使用。我想摆脱&我现在使用的#define

2 个答案:

答案 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(就像我讨厌定义的那样)。

那就是说,你不应该依赖两个对象指针是同一个地址的事实,除非你的意思是“它是这个对象”而不是“它有这个值”。 (并且你永远不会对字符串意味着,因为字符串只有值。)写入语义,而不是实现细节。不要过早地优化比较。