8

しばらくの間私を熟考した質問。私は主に、iPhone および Mac 用の Objective-C に手を出す .net 開発者です。

Objective-C のメソッド間で「データセット」を送信するにはどうすればよいですか。たとえば、C# では、カスタム クラスにデータを入力し、カスタム クラス タイプの List で渡すことができます。たとえば、顧客クラスがある場合は、次のようにします。

List<Customer> customers = DataLayer.GetAllCustomers();

obj-c でこれを行う方法を確認できる唯一の方法は、NSArray にカスタム オブジェクトを設定することですか? これは物事を行うための効率的な方法ですか?他の推奨事項はありますか?返したいデータベース/データとしてsqliteを使用しています。

4

1 に答える 1

25

あなたは正しい方向に進んでいます。

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は、エンティティのビジュアルモデリング、プロパティゲッターとセッターの自動生成、あるスキーマバージョンから別のスキーマバージョンへの移行のきめ細かい制御などの機能も提供します。

于 2008-08-27T21:03:04.880 に答える