2013-09-03 13 views
5

は、私はクラスのインタフェースを定義するヘッダファイルがあります。Xcodeでターゲットごとに複数の実装を実装しても問題ありませんか?

// MyClass.h - included in all targets 
// 
@interface MyClass 
+ (void) doThing; 
@end 

をそして、私は2つの異なる実装ファイルがある - ターゲットごとに1つ。

// MyClass+targetA.m - Only included in targetA 
// 
@implementation MyClass 
+ (void) doThing { NSLog(@"targetA"); } 
@end 


// MyClass+targetB.m - Only included in targetB 
// 
@implementation MyClass 
+ (void) doThing { NSLog(@"targetB"); } 
@end 
  • このアプローチに関する問題はありますか?
  • 各ターゲットの動作をカスタマイズするための、より簡単な方法はありますか?

メソッドMyClassは、アプリケーションの外観をテーマにしています。 MyClassといくつかのターゲットにいくつかのメソッドがあります

+2

これらの2つの実装は、異なるソースファイルにあると正当化されるほど大きく異なりますか?そうでなければ、ターゲット固有のプリプロセッサ定義に基づく#ifdefが良い選択かもしれません。しかし、2つのファイルを保存することに決めたら、名前を変更することをお勧めします。私はXcodeが2つのファイルが同じ名前を持っていると混乱しているのを見ました。 – mah

+0

@mah - 興味深い!お返事をありがとうございます。私はプリプロセッサの定義を使用していましたが、これも過去に使用していたためです。実装はさまざまなクライアントのためのアプリをテーマにしているため、実装間には多少の違いがあります。名前の変更についての大きなヒント - 私はそれが可能ではありませんでした。 – Robert

+0

クラス名とソースファイル名の間には何の関係もありませんので、間違いなく可能ですが、MyClass_client1.m、MyClass_client2.mなどのようにそれらの名前を付けるのが最善です。 – mah

答えて

1

はい、私は条件付きコンパイルを使用していることを除いて同様のアプローチをとっていますが、プライベート機能を公開する1つのターゲットと、すべてのターゲットが同じソースファイルセットを共有しています。

しかし、両方のアプローチの結果は同じです。

+0

あなたの答えをありがとう!私はあなたが「プライベート機能を公開することを目標にし、公開機能を公開する別のターゲット」という意味を理解していません。それは面白い音のように聞こえる、少し説明できますか? – Robert

+0

@Robert単純なことですが、限られた機能を持つ静的ライブラリを公開したいので、コンパイル時に定数を使用してプライベートとパブリックのビルドを制御します。 – trojanfoe

1

私は実際にはTARGET_FREEのようなカスタムフラグを使用してターゲット設定でOTHER_CFLAGSを設定する方が好きです。そして、ソースで私は次のようなものを書くことができます:

@implementation MyClass 
+ (void) doThing { 

#ifdef TARGET_FREE 
    // Code for one target 
#else 
    // Code for another 
#endif 

} 
@end 
+0

はい私はこれを過去に使っていましたが、うまく動作します。問題は、「MyClass」の複雑さです。これには20種類のメソッドがあります(テーマ別には、さまざまなクライアントのテンプレートアプリ)。このように実装すると、ターゲットとメソッドの数が増えるにつれてコードが複雑になることがわかります。 – Robert

+0

OK。そうですか。だから、できるだけコンパイルして作業する必要がありません。関連するコードを編集するときに、xcodeのナビゲーションやコードセンスの問題に遭遇する可能性がありますが、わかりません。 – Skie

+0

はい、ヘッダーからソースへのショートカットナビゲーションが壊れていることを確認しました。私はトロイの木馬のアドバイスを受けて、各.mファイルの名前を変更しました。私はそのことで暮らすことができると思います – Robert

関連する問題