2012-04-22 5 views
6

いくつかの定数は、いくつかの異なるviewControllerクラスとNSObjectクラスatmにコード化されています。私の仕事に携わっている人の一人は、自分たちのクラス(つまり定数クラス)に入れなければならないと言いました。objective c定数クラス

私は、このタイプのデザインのプロと詐欺が何であるのだろうと思っています。どのようにするかについての明確化はすばらしいことでしょう。

たとえば、 私は新しいNSObjectクラスを作成して、その中に#definesの束を持っていますか?私はそれらを使用する必要があるとき、私は定数クラスをサブクラス化し、他のメソッドまたは別のクラスの変数と同様に、このクラスの内部で定数を使用しますか?

すなわち

myclass.theConstant 

任意の助けを大幅appreicatedされるであろう。

+1

Manjunathはすばらしい答えをここに掲載しました:http://stackoverflow.com/a/2377432/1218605 –

答えて

11

定数を使用するものに定数を入れます。グローバルな「すべて定数」ファイルを作成しないでください。これにより、コードの再利用は大きな頭痛になります。たとえば、通知を送信する場合は、通知名文字列が必要です。だからあなたは通知を投稿するクラスにそれを入れます:

.h 
extern NSString * const MYObjectDidSomethingNotification; 

.m 
NSString * const MYObjectDidSomethingNotification = @"MYObjectDidSomethingNotification"; 

定数は一般的にメソッドや定義ではありません。彼らは上記のような単なる定常的な世界です。可能な限り#defineを避けるべきですが、非常に便利な場所がいくつかあります(一定のUIColorオブジェクトのように、そうでなければ初期化するのに苛立ちます)。

例を見るためにアップルのヘッダーファイルで少し時間を過ごしてください。 UIWindow.h、UITableViewCell.h、およびUITableView.hで、定数の一般的な定義の良い例を見てください。

+0

大丈夫です、あなたの返事をありがとう。なぜ#defineが悪いのですか?単なる好奇心から。 –

+0

私はなぜ定義が定数に悪いのか不思議です。型の安全性の欠如のためですか? – borrrden

+4

スコーピング。型の安全性。デバッガで評価できます。より良い情報隠蔽。定数を変更しても、プログラム全体を再コンパイルする必要はありません。定義が誤って再定義されたときに、コンパイル時の問題を回避します。例外として、#defineが必要な場合と、いくつかの場合に優先されるものがあります。しかし、デフォルトでは、プリプロセッサマクロ言語ではなく、Objective-Cでコードを記述する必要があります。繰り返しますが、Apple SDKを見ると、非常に特殊なケース(NSAssertなど)を除いて、#defineの欠落が目立ちます。 –

0

ちょうどの場合は、クラスに入る必要はありません。専用の.hファイルに貼り付けてください。

関連する問題