簡単な答え:
iOS 開発者コレクション リファレンス。
一部始終:
、、NSDictionaryなどのコレクションを扱う Foundation クラスのいくつかをより広く見てみるとよいと思います。特に難解だと感じている場合は、.NSArray
NSSet
CFBag
あなたの質問は、一般的な Cocoa パターンを読むことで利益が得られることを示唆しています。実際、あるオブジェクトから別のオブジェクトに何でも渡すことができます。NSArray
インスタンスは確かに複数のNSString
インスタンスと同じです。
たとえば、"PassingData" (GitHub リンク)というアプリがあるとします。データを持つクラスを定義します。この場合は、いくつかの「energyEnhancer」文字列です。
@interface PDDataSource : NSObject
@property (nonatomic, strong) NSString *engergyEnhancer;
@property (nonatomic, strong) NSString *engergyEnhancer2;
@property (nonatomic, strong) NSString *engergyEnhancer3;
@end
次に、ビュー コントローラーで、次のようにエネルギー エンハンサーにアクセスしようとします。
- (void)logDataSourceWithStrings {
NSLog(@"Energy enhancer 1: %@", self.dataSource.energyEnhancer);
NSLog(@"Energy enhancer 2: %@", self.dataSource.energyEnhancer2);
NSLog(@"Energy enhancer 3: %@", self.dataSource.energyEnhancer3);
}
これを行う別の方法は次のようになります。
- (void)logDataSourceWithArray {
for(NSInteger i = 0; i < self.dataSource.enhancers.count; i++) {
NSLog(@"Enhancer %i: %@", i, self.dataSource.enhancers[i]);
}
}
配列を使用するもう 1 つの利点は、コンパイル時に宣言した変数の数に制限されないことです。ゲームやフィットネス アプリの堅牢性が大幅に向上しました。
これは、別のオブジェクトにあるデータにアクセスする唯一の方法です。その他の強力な候補は、デリゲート プロトコル、通知、およびコールバック ブロックです。通常、別のクラスのデータに直接アクセスしている場合は、次の 3 つのいずれかを行っている可能性があります。
- 合成: 親クラスを支援するために存在するいくつかのオブジェクトを含むクラスを作成します。
- シングルトンへのアクセス。シングルトン クラスは、一度だけインスタンス化できる普遍的にアクセス可能なクラスです。それらは議論の余地がありますが、適切な使用例があります。
- オブジェクトに一時的な状態を保存します。
複数の種類のデータをモデル化する場合は、値 (配列、文字列、数値など) を辞書にネストすることを検討してください。ただし、常にそうであるとは限りません。NSDictionary
すべてのクラスに単一のプロパティを持たせたくありません。最善の判断をしてください。
モデリング時のもう 1 つの優れた戦略は、Xcode の plist エディターを使用してオブジェクトをモックすることです。次に、plist に一致するクラス (または複数のクラス) をコードで作成できます。
規約とCocoa Design Patternsに慣れるのに時間をかける価値は十分にあります。ロッサ運!