0

Objective cを使用して、ハードウェアを使用している2つのクラスがあり、で記述されていc +objCます。プロジェクトの他のクラスはObjectivecであり、それらのクラスのインスタンスを作成します。

私の質問 。

私が持っているclassA.mとしましょうclassB.m。それらは両方とも同じである必要がある整数constを持っています:const int numOfSamples=7;

私は、AとBの両方がそれらを見ることができる、このすべてのconst変数を保持するいくつかの構成ファイルを作成するための最良の解決策を探しています。私はいくつかの方法を知っていますが、私は何をするのが正しいのだろうかと思います。

  1. :を作成してそれに書き込むことができるのだろうかconfiguration.m
  2. singletonすべてのグローバルを保持するファイルを使用します。

ナンバー1は私には最高のようですが、どのように正確に行う必要がありますか?

ありがとう。

4

2 に答える 2

1

アプローチ1を機能させるには、次の2つのファイルを定義する必要があります。

  1. すべての定数を宣言するヘッダーファイル。

  2. 定数が定義および初期化されている.mファイル。

あなたの例では:

/* .h file */
extern const int numOfSamples;

/* .m or .c file */
const int numOfSamples = 7;

次に、これらの定数が必要な他のすべてのファイルに.hヘッダーを含めます。キーワードに注意してくださいextern。これにより、定義せずに変数が宣言されます。このようにして、重複シンボルエラーを発生させることなく、.hファイルを複数回含めることができます。

編集:

私が提案するアプローチは、Cプログラムでグローバル変数を処理する正しい方法です。

さて、グローバル変数が良いかどうかは別として、それはもっと長い話です。

一般的に言って、グローバル変数はトリッキーであり、プログラム内のデータと動作のより良いカプセル化(別名、情報隠蔽)に向けた40年にわたる努力に反します(「システムをモジュールに分解する際に使用される基準について」、David Parnas、 1972)。

これをさらに説明するために、問題の1つの側面は、コメントで述べていることです。1つのモジュールがグローバル変数の値を変更し、プログラムの動作全体に影響を与える可能性です。これは明らかに悪いことであり、制御できない副作用につながります(自明でないサイズのプログラムでは)。

あなたの場合、「構成」と「定数」の値について話しているという点で、状況は少し異なると思います。これは一般的なケースとはまったく異なるケースであり、その目的のためにconstsのヘッダーファイルを安全に使用できると思います。

とは言うものの、一般的に、構成のテーマ全体が巨大なものであることを理解しています。たとえば、プログラム構成をその場で変更するメカニズムが必要になる場合があります。この場合、定数変数ヘッダーのアプローチは正しくありません。または、プログラム構成がリモートシステムの状態に依存する可能性があります(たとえば、ログインしているのか、ログインしていないのかを想像してください)。

ヘッダーファイルを使用することがあなたのケースに最適なアプローチであることを保証することはできませんが、上記の議論と私があなたに与えた例があなたがそれを理解するのに役立つことを願っています。

于 2012-12-18T10:53:53.380 に答える
0

plist最善の方法は、すべての構成値を含むファイルを使用することだと思います。

構成値が少ない場合は、Info.plistファイルを使用できます。

于 2012-12-18T10:53:37.793 に答える