0

I have a global constant:

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

... and I would like to create XYZConstant2 that would point to XYZConstant1. I thought it would be as simple as this:

NSString *const XYZConstant2 = &XYZConstant1

I played with * and & a bit but can't get it right. I'd like to get rid of #define for XYZConstant2 that I use now.

4

2 に答える 2

1

このようなコンパイル時のエイリアスを C (したがって ObjC) で作成することはできません。XYZConstant2関数またはメソッド内で宣言することによってランタイム エイリアスを作成できますが、静的としては作成できません。同じエラーを作成するこの純粋な C を比較してください。

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

(コンパイラ エラー: "initializer element is not a compile-time constant"も参照してください。)

通常、この種のエイリアシングが必要な場合 (通常は文字列定数の名前が変更されたために)、a を使用します#define(私は定義が嫌いです)。

とはいえ、「この値を持つ」ではなく「このオブジェクトである」という意味でない限り、2 つのオブジェクト ポインターが同じアドレスであるという事実に依存するべきではありません。(そして、文字列には値しかないため、文字列に対してそれを意味することは決してありません。) 実装の詳細ではなく、セマンティクスに書き込みます。比較を時期尚早に最適化しないでください。

于 2012-10-09T14:17:08.390 に答える