2011-08-21 18 views
0

私のアプリでデータを整理する最良の方法を決定しています。私は、NSArrayNSDictionaryを使用してデータ構成のためのいくつかの異なるスタイルのメモリと処理要件に関心を持つ必要があるかどうかを判断しようとしています。多次元データオブジェクト

は、この例を考えてみましょう:

あなたは一人一人に関連する個々の人と情報の順序付きリストを持っています。ここでは関係のない任意の理由で発注されます。

リストは、注文された通りNSArrayです。

  • この配列にはNSDictionariesを入力します。各辞書の中には、その1人の個人に関する情報があります。 I. 「名前」、「住所」、「電子メール」などのキーを入力します。
  • NSArrayには、NSString(キーの配列)という一意の識別子のリストのみが含まれています。次に、 "電子メールアドレス"用の辞書、 "名前"用の辞書など、各情報項目ごとにNSDictionaryを分けています。また、それぞれの辞書には固有の識別子が辞書のキーです。

これらのいずれよりも「優雅」なソリューションはありますか?また、アプリの実行時の要求に対して、他のものより優れていますか?

私はあなたのような単純なことを行うことができます多次元配列を作成することが本当の簡単で直感的であるPHPの背景から来る:Objective Cの中のベストプラクティスを考え出す

echo "The second person's name is ".$person[2][name];

ビットとなっています私のために挑戦する。

答えて

0

あなたの2番目の提案(別々の辞書)は、私にとって非常に直感的ではないようです。さらに、2つのオプションの間でメモリ使用量の違いが多く見られることはありません。辞書の配列は問題ありません。

私は示唆している代替オプションは、実際に例えば、クラスを持っているだろう:

@interface Person : NSObject 
@property (copy) NSString *name; 
@property (copy) NSString *address; 
@property (copy) NSString *email; 
@end 

各Personオブジェクトが正確にストレージがそれらのために必要としたので、これは、潜在的に、より効率的な辞書を使用するよりも可能性があり3つのフィールド。

+0

あなたは数百人の人がいるかもしれないし、注文する必要があるので、この方法では 'Person'オブジェクトの' NSArray'をまだ持っています。辞書の配列に対してこれを行うメモリオーバーヘッドに違いがあるのだろうか? – johnbakers

+0

配列に含まれるオブジェクトへのポインタのみが配列に格納されます。これらのオブジェクト自体のサイズは配列に影響しません。 – jtbandes

+0

合成された各プロパティに対して '(retain)'を選択しても、Personオブジェクトに追加された元のオブジェクトを解放した場合、メモリフットプリントは同じになりますか?たとえば、 'person.name = aString; [aString release];'? – johnbakers