3

タイトルが示すように-Javaでは、クラスに定数を定義させてから、それらを使用するクラスにインポートします。Objective-Cでも同じように行われますか?

明確にするために、私はしたい

#define variable 1
#define variable 2.0

また、異なるクラスで同じ定数を使用します。

4

3 に答える 3

3

マクロを使用する別の方法があります。それらをグローバル変数として定義できます。

Constants.hの場合:

extern int variableX;
extern float variableY;

Constants.m(通常はインポート後、他のコードの前):

int variableX = 1;
float variableY = 2.0f;

このアプローチには、マクロに比べていくつかの利点があります。

  1. クライアントは値を確認する必要はありません。
  2. 値が変更された場合、Constants.hをインポートするすべてのファイルを再コンパイルする必要はありません。
  3. 値は、リテラルだけでなく、さまざまな方法で初期化できます。
  4. 変数を使用するときは、タイプセーフティとコンパイラチェック。
于 2013-02-23T00:06:49.773 に答える
3

マクロをヘッダー ファイルに入れます。マクロにアクセスする必要があるときはいつでも、そのヘッダー ファイルに入れます#include#import

于 2013-02-22T23:45:07.940 に答える
1

あなたの例は、C プリプロセッサ マクロを使用しています。これは、C スタイルのプリプロセッサ マクロをサポートする他の環境と同じように、Objective-C でも機能します。それらを共有ヘッダーに貼り付け#importます#include

それはまったく問題ありませんが、クラス関連の定数と、特に Objective-C について質問していました。Objective-C では、定数 NSString (通知名や辞書キーなど) や、次のように定義された特定のクラスに属する同様の定数をよく見かけます。

ヘッダー (.h):

extern NSString * const LibraryEntryDidUpdateNotification;
extern const NSUInteger LibraryEntryDefaultStarRating;

@interface LibraryEntry : NSObject

...

実装 (.m):

NSString * const LibraryEntryDidUpdateNotification = @"LibraryEntryDidUpdateNotification";
const NSUInteger LibraryEntryDefaultStarRating = 3;

@implementation LibraryEntry

...

これは、Apple が最新のフレームワークで行う方法であり、多くのサードパーティの開発者が行う方法です。私の意見では、プリプロセッサ マクロよりもリファクタリングの方が簡単です (たとえば、Xcode の「リファクタリング」ボタンを使用してクラスの名前を変更する場合、これらの定数でも同じことが簡単に機能します) が、定数のプリプロセッサ マクロにも利点があります。

興味がある場合は、トピックのより詳細な説明については、こちらこちらを参照してください。

于 2013-02-23T00:12:39.407 に答える