0

我有一个全局常量:

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

...我想创建XYZConstant2一个指向XYZConstant1. 我认为它会像这样简单:

NSString *const XYZConstant2 = &XYZConstant1

我玩了一下*&但无法正确处理。我想摆脱我现在使用#defineXYZConstant2那个。

4

2 回答 2

1

这是一个常数,所以编译时间。如果你想指出它,你不能用一个常数。

于 2012-10-09T13:50:56.783 回答
1

您不能在 C 中(因此在 ObjC 中)创建这样的编译时别名。您可以通过在函数或方法内部声明来创建运行时别名XYZConstant2,但不能声明为静态别名。比较这个纯 C,它会产生相同的错误:

const char * const foo;
const char * const bar = foo;

(另见编译器错误:“初始化元素不是编译时常量”。)

通常,当需要这种别名时(通常是因为字符串常量被重命名),您使用 a #define(我讨厌定义)。

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

于 2012-10-09T14:17:08.390 回答