Objective-c-data-storage

提供:Dev Guides
移動先:案内検索

Objective-Cのデータストレージ

データの保存と検索は、どのプログラムでも最も重要なものの1つです。 Objective-Cでは、作業が複雑になるため、通常はリンクリストのような構造に依存しません。 代わりに、NSArray、NSSet、NSDictionaryおよびその可変形式などのコレクションを使用します。

NSArrayおよびNSMutableArray

NSArrayはオブジェクトの不変配列を保持するために使用され、NSMutableArrayはオブジェクトの可変配列を保持するために使用されます。

可変性は、実行時に事前に割り当てられた配列を変更するのに役立ちますが、NSArrayを使用する場合、既存の配列のみを置き換え、既存の配列の内容を変更することはできません。

NSArrayの重要なメソッドは次のとおりです。

  • alloc/initWithObjects -オブジェクトで配列を初期化するために使用されます。
  • objectAtIndex -特定のインデックスでオブジェクトを返します。
  • count -オブジェクトの数を返します

NSMutableArrayはNSArrayから継承されるため、NSArrayのすべてのインスタンスメソッドはNSMutableArrayで使用できます。

NSMutableArrayの重要なメソッドは次のとおりです-

  • removeAllObjects -配列を空にします。
  • addObject -配列の末尾に特定のオブジェクトを挿入します。
  • removeObjectAtIndex -これは、特定のインデックスでobjectAtを削除するために使用されます
  • exchangeObjectAtIndex:withObjectAtIndex -指定されたインデックスで配列内のオブジェクトを交換します。
  • replaceObjectAtIndex:withObject -インデックスのオブジェクトをオブジェクトに置き換えます。

上記のリストは頻繁に使用されるメソッドであり、XCodeの各クラスにジャンプして、これらのクラスのメソッドをさらに知ることができることを覚えておく必要があります。 以下に簡単な例を示します。

#import <Foundation/Foundation.h>

int main() {
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
   NSArray* array = [[NSArray alloc]
   initWithObjects:@"string1", @"string2",@"string3",nil];
   NSString *string1 = [array objectAtIndex:0];
   NSLog(@"The object in array at Index 0 is %@",string1);

   NSMutableArray *mutableArray = [[NSMutableArray alloc]init];
   [mutableArray addObject: @"string"];
   string1 = [mutableArray objectAtIndex:0];
   NSLog(@"The object in mutableArray at Index 0 is %@",string1);

   [pool drain];
   return 0;
}

プログラムをコンパイルして実行すると、次の結果が得られます。

2013-09-29 02:33:23.195 demo[3487] The object in array at Index 0 is string1
2013-09-29 02:33:23.196 demo[3487] The object in mutableArray at Index 0 is string

上記のプログラムでは、可変配列に割り当てた後に文字列を挿入できるNSMutableArrayとNSArrayの単純な区別を見てきました。

NSDictionaryおよびNSMutableDictionary

NSDictionaryはオブジェクトの不変辞書を保持するために使用され、NSMutableDictionaryはオブジェクトの可変辞書を保持するために使用されます。

NSDictionaryの重要な方法は次のとおりです-

  • alloc/initWithObjectsAndKeys -指定された値とキーのセットから構築されたエントリで新しく割り当てられた辞書を初期化します。
  • valueForKey -指定されたキーに関連付けられた値を返します。
  • count -辞書内のエントリの数を返します。

NSMutableDictionaryはNSDictionaryから継承されるため、NSDictionaryのすべてのインスタンスメソッドはNSMutableDictionaryで使用できます。

NSMutableDictionaryの重要なメソッドは次のとおりです-

  • removeAllObjects -エントリの辞書を空にします。
  • removeObjectForKey -指定されたキーとその関連する値を辞書から削除します。
  • setValue:forKey -指定されたキーと値のペアを辞書に追加します。

辞書の簡単な例を以下に示します-

#import <Foundation/Foundation.h>

int main() {
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
   NSDictionary* dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
   @"string1",@"key1", @"string2",@"key2",@"string3",@"key3",nil];
   NSString *string1 = [dictionary objectForKey:@"key1"];
   NSLog(@"The object for key, key1 in dictionary is %@",string1);

   NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc]init];
   [mutableDictionary setValue:@"string" forKey:@"key1"];
   string1 = [mutableDictionary objectForKey:@"key1"];
   NSLog(@"The object for key, key1 in mutableDictionary is %@",string1);

   [pool drain];
   return 0;
}

プログラムをコンパイルして実行すると、次の結果が得られます。

2013-09-29 02:34:50.528 demo[9135] The object for key, key1 in dictionary is string1
2013-09-29 02:34:50.528 demo[9135] The object for key, key1 in mutableDictionary is string

NSSetおよびNSMutableSet

NSSetは異なるオブジェクトの不変セットを保持するために使用され、NSMutableDictionaryは異なるオブジェクトの可変セットを保持するために使用されます。

NSSetの重要なメソッドは次のとおりです-

  • alloc/initWithObjects -指定されたオブジェクトのリストから取得したメンバーで、新しく割り当てられたセットを初期化します。
  • allObjects -セットのメンバーを含む配列、またはセットにメンバーがない場合は空の配列を返します。
  • count -セット内のメンバーの数を返します。

NSMutableSetはNSSetから継承されるため、NSSetのすべてのインスタンスメソッドはNSMutableSetで使用できます。

NSMutableSetの重要なメソッドは次のとおりです-

  • removeAllObjects -すべてのメンバーのセットを空にします。
  • addObject -まだメンバーではない場合、指定されたオブジェクトをセットに追加します。
  • removeObject -セットから特定のオブジェクトを削除します。

セットの簡単な例を以下に示します-

#import <Foundation/Foundation.h>

int main() {
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
   NSSet* set = [[NSSet alloc]
   initWithObjects:@"string1", @"string2",@"string3",nil];
   NSArray *setArray = [set allObjects];
   NSLog(@"The objects in set are %@",setArray);

   NSMutableSet *mutableSet = [[NSMutableSet alloc]init];
   [mutableSet addObject:@"string1"];
   setArray = [mutableSet allObjects];
   NSLog(@"The objects in mutableSet are %@",setArray);

   [pool drain];
   return 0;
}

プログラムをコンパイルして実行すると、次の結果が得られます。

2013-09-29 02:35:40.221 demo[12341] The objects in set are (string3, string2, string1)
2013-09-29 02:35:40.222 demo[12341] The objects in mutableSet are (string1)