私はフレームワーク 'X'にクラスファイルを持っています、クラスファイルはフレームワーク 'Y'のメソッドを使用しています。実行時にフレームワーク 'Y'が存在しない場合にクラスファイルをオプションにする方法はありますか?フレームワーク 'X'を使用し、フレームワーク 'Yなしのプロジェクトのコンパイル中にxcodeプロジェクトにコンパイルエラーを投げてはいけません。Objective-Cクラスをフレームワークに基づいてオプションにする方法は?
2
A
答えて
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
になりますフレームワークのすべてのインスタンスです。あなたはこの動作を期待し、それを処理する必要があります。