あなたは正しい方向に進んでいます。
Cocoaのコレクションクラス(すべて可変で不変のバリアントがあります)は次のとおりです。
- NSArray:順序付け、オブジェクトを複数回含めることができます
- NSDictionary:順序付けされていない、キーから値へのマッピング、キーがコピーされる
- NSSet:順序付けされていません。オブジェクトを1回だけ含めることができます
- NSCountedSet:順序付けされていません。オブジェクトを複数回含めることができます
不変のバリアントは効率に大いに役立ちます。可変バリアントを持つクラスのアクセサーの標準パターンは、保持するのではなくコピーすることです。これは、プロパティの属性を@property
使用して、メカニズムで体系化されています。copy
// Department.h
@interface Department : NSObject
@property (readwrite, copy) NSSet *employees;
@end
これは、可変配列を配列を取るものに渡すとコピーされ、それを他の何かに渡すと再びコピーされることを意味します。秘訣は、不変オブジェクトを「コピー」すると実際にはそれが保持されるため、最初のコピーに対してのみヒットするということです。とにかく最初にコピーを作成して、変更可能な配列を他の何かに渡さないようにし、渡したものの後ろで変更することをお勧めします。
Mac OS X上のCocoaの場合は、CoreDataも確認することを強くお勧めします。これは、.NET / ADO/etcから使用される可能性のある「データセット」パターンの代替手段です。Core Dataを使用すると、「すべての顧客を獲得」してそのコレクションを渡すことはありません。代わりに、関心のある顧客を照会し、照会したオブジェクトの関係をトラバースすると、他のオブジェクトが自動的に引き込まれます。
Core Dataは、エンティティのビジュアルモデリング、プロパティゲッターとセッターの自動生成、あるスキーマバージョンから別のスキーマバージョンへの移行のきめ細かい制御などの機能も提供します。