1

アプリのLiteバージョンの新しいターゲットを作成しました。Liteアプリは、メインアプリにある基本クラスの一部のみを使用します。つまり、4つまたは5つのファイルをインポートする必要があるオプションを使用する必要はありません。

私の質問は、設計の観点から、これを処理して、Liteバージョンが必要なクラスの部分のみを使用できるようにするための最良の方法は何ですか?明らかに、1つの解決策は、これら4つの不要なファイルをLiteビルドフェーズにインポートし、クラス全体(不要な部分も含む)を使用することです。しかし、これは非効率的なようです。Liteバージョンが実行されている場合、これらのファイルがインポートされないようにifndefを実行できることはわかっていますが、クラス内のコードがコンパイラーによって取得されないようにブロックするにはどうすればよいですか?

Liteバージョンで、必要なオプションのみを使用するBaseクラスのサブクラスを作成する方がよいでしょうか。しかし、それでも私はそれらの不要なファイルをインポートする必要があると思いますか?

これについて少し混乱しましたが、初めてメインターゲットのコードを利用する別のターゲットを作成しました。どんな助けでも感謝に感謝します。

4

2 に答える 2

1

コモン/ライト機能をスーパークラスに入れます。サブクラスの重い機能。

于 2012-11-08T21:15:18.090 に答える
1

別の回答が指摘しているように、これを処理するには、ライト機能をサブクラスに入れ、フル機能をスーパークラスに入れます。

もう1つのオプションは、単一のクラスを使用し、Objective-Cカテゴリにすべての機能を追加することです。基本的に、基本実装のメソッドを補足または置換するために、カテゴリ内のメソッドを定義できます。

ただし、サブクラスとは異なり、カテゴリで定義されたメソッドはsuper、基本クラスの機能を取得するために呼び出すことはできません。superそれでも、NSObject、UIDocument、またはあなたが持っているものであるかどうかにかかわらず、基本クラスのスーパークラスを参照します。カテゴリのない実装ではありません。

利点は、クラス名が1つしかないため、クラスをインスタンス化するコードで#ifdef、ライトバージョンとフルバージョンのどちらをビルドしているかに応じて、クラスや#includeを切り替えるようなものを使用する必要がないことです。

于 2012-11-09T17:21:58.750 に答える