2016-08-24 5 views
2

私はフレームワーク 'X'にクラスファイルを持っています、クラスファイルはフレームワーク 'Y'のメソッドを使用しています。実行時にフレームワーク 'Y'が存在しない場合にクラスファイルをオプションにする方法はありますか?フレームワーク 'X'を使用し、フレームワーク 'Yなしのプロジェクトのコンパイル中にxcodeプロジェクトにコンパイルエラーを投げてはいけません。Objective-Cクラスをフレームワークに基づいてオプションにする方法は?

答えて

2

はい、静的に直接にメッセージを渡すことによって、フレームワークYのクラスのオブジェクトをロードしません。

たとえば、フレームワークYのクラスがYYYClassであるとします。フレームワークX内でYYYClassを参照する場合、通常は次の操作を行います。

YYYClass *instance = [[YYYClass alloc] init]; 

[YYYClass alloc]への呼び出しはYYYClassにメッセージを渡しています。リンカではYYYClassが必要です。

ただし、少し違います。

YYYClass *instance = [[NSClassFromString(@"YYYClass") alloc] init]; 

フレームワークYのクラスオブジェクトが動的にロードされているため、リンカではそのクラスを使用する必要はありません。

フレームワークYが最後のバイナリにない場合、NSClassFromString(@"YYYClass")Nil(クラスのバージョンはnil)です。 [Nil alloc]nilを返し、[nil init]nilを返します。

エンド効果はYのクラスはnilになりますフレームワークのすべてのインスタンスです。あなたはこの動作を期待し、それを処理する必要があります。