1

数百の定数を定義する.hファイルがあります。これがそれらの1つであると仮定しましょう:

#define KDSomeItem      1

Objective-CランタイムAPIを使用して、インスタンス変数名のリストを取得できることを知っています。この質問で詳しく説明されているように、Objective-Cでオブジェクトのすべてのフィールドを一覧表示するにはどうすればよいですか。 私はまた、私[object valueForKey:theName]の以前の質問で見つかったように、ゲッターを使用してivarにアクセスできることも知っています:その名前を保持する文字列を使用してプロパティ/変数にアクセスする方法

私の質問は、定数を使って似たようなことができるかということです。それは私ができることです:

a)プログラムですべての定数のリストを取得する

b)名前を保持する文字列がある場合は、定数にアクセスします

たとえば、このような文字列がある場合、NSString * theName = @"KDSomeItem";この文字列を使用して定数を評価できますか?

4

2 に答える 2

1

これを行うことはできません。インスタンス変数とは異なり、#define-d定数は、プリプロセッサがそれらを使用した後、トレースを残しません。それらはメタデータを残しません-プログラム本体のすべてのインスタンスは、ObjectiveCコンパイラが適切にコードを分析する前でもにKDSomeItem置き換えられます。1

実行時に定数名を使用できるようにする必要がある場合は、必要なすべてのメタデータを自分で作成する必要があります。これを行うには、プリプロセッサの「文字列化」演算子を調べてください。

#define STR(X) #X

このマクロはプリプロセッサ定数に適用でき、次の名前のC文字列リテラルを生成できます。

const char *nameOfKDSomeItem = STR(KDSomeItem); // same as "KDSomeItem"
于 2012-08-24T16:26:39.153 に答える
0

いいえ。定数はプリプロセッサマクロです。これは、使用するソースコードにテキストで置き換えられます。

于 2012-08-24T16:28:11.937 に答える