ユニバーサル アプリでクラスを実装する正しい方法は何ですか?
現在、2 つの xib (デバイスごとに 1 つ) があり、各 xib は同じクラスを呼び出し、そのクラス内には、現在アプリを実行しているデバイスの種類をチェックする条件ステートメントがあり、それぞれに対応するコードを実行します。
これが正しい構造であるかどうか混乱していますか、それとも基本クラスを作成してから、各デバイスに対応するものだけを上書きするようにそのクラスを拡張する必要がありますか?
ユニバーサル アプリでクラスを実装する正しい方法は何ですか?
現在、2 つの xib (デバイスごとに 1 つ) があり、各 xib は同じクラスを呼び出し、そのクラス内には、現在アプリを実行しているデバイスの種類をチェックする条件ステートメントがあり、それぞれに対応するコードを実行します。
これが正しい構造であるかどうか混乱していますか、それとも基本クラスを作成してから、各デバイスに対応するものだけを上書きするようにそのクラスを拡張する必要がありますか?
私は個人的に可能な限りコードを再利用しようとしていますが、多くの開発者は「スパゲッティ コード」を避けるために iPhone と iPad のバージョン用に別々のクラスを作成することを好みます。それは、作成しているアプリの複雑さに完全に依存します。単純なアプリの場合、デバイスをテストするためのロジックを提供し、それに基づいてさまざまなコードを実行するのではなく、それぞれに複数のクラスを作成する理由はありません。ただし、単体テストや iPad 固有のコードの簡単な更新、およびその逆など、それぞれに個別のコードを作成することには多くの利点があります。成功している開発者が両方の方法論を使用しており、コードを正しく文書化してプラグマをマークすれば、どちらもうまく機能するのを見てきました。
diff クラスの使用例を次に示します。
完全なテストを入力するのが面倒な場合は、デバイスの種類を返す単純なクラスをいつでも作成できます。これは、iPod やその他のデバイス タイプなどをテストする場合に便利です。プロジェクトが非常に大きく、クラスが雑然とし始めない限り、ほとんどの場合、これが私が使用するアプローチです。
// TestDevice.h
@interface TestDevice : NSObject
+ (BOOL)isIpad;
@end
// TestDevice.m
#import "TestDevice.h"
@implementation TestDevice
+ (BOOL)isIpad
{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
return YES;
return NO;
}
@end
次に、それを .pch に追加するだけで、呼び出してアプリ内のどこでも再利用できます...
if ([TestDevice isIpad]) {
// Something
}
else {
// Something else
}