3

重複の可能性:
Objective-C の名前空間の競合を解決する最善の方法は何ですか?

モバイル基板に依存する、iPhone用のサードパーティの動的ライブラリを開発しました。問題は、一部の APP に「Class1」という名前の Obj-C クラスがあり、私の dylib にも「Class1」という名前のクラスがある場合、実行時にどのクラスが使用されるかという保証がないことです。クラス名「Class1」を保持して名前空間の問題を解決できる解決策はありますか?

4

1 に答える 1

2

Objective-C では、名前空間の概念は存在しません。ソース ファイルは単純に別のファイルにインポートされるため、共通名がクラス名として使用されている場合、もちろん名前の衝突が発生する可能性があります。

Objective-C で衝突の問題を解決する良い方法は、クラス名を他のクラス名と区別するためにプレフィックスを採用することです。これは、Apple 自身がすでに使用している手法です。配列クラスについて考えてみましょう。これは NSArray と呼ばれます。なぜですか?

その背後には特定の理由があります。

  • N :を識別する
  • S :ステップを識別する
  • Array : データ構造の名前を識別します

NextStepは、Foundation フレームワークを作成した会社の名前であり、90 年代半ばに Apple に買収された会社です。

たとえば、ライブラリにパックするクラスに別のプレフィックスを使用しています。次を使用します: AleArray私の名前の最初の 3 文字とそれに続くデータ構造の名前。独自のプレフィックスを選択して、それを使用できます。 .

もちろん、単純なプレフィックスを使用した衝突の可能性は、(通常は逆ドメイン名表記を使用する) 名前空間を使用するよりも依然として高くなりますが、ほとんどの状況では十分です。

于 2012-10-14T08:38:06.540 に答える