Objective-C資料儲存

2019-10-16 23:14:50

資料儲存及檢索是任何程式中最重要的一個操作。 在Objective-C中,通常不會依賴連結串列等結構,因為它會使工作變得複雜。一般使用像NSArrayNSSetNSDictionary及其可變形式的集合。

1. NSArray和NSMutableArray

NSArray用於儲存不可變物件陣列,NSMutableArray用於儲存可變物件陣列。
Mutablility有助於在執行時更改預分配陣列中的陣列,但如果使用NSArray,只替換現有陣列,並且不能更改現有陣列的內容。

NSArray的重要方法如下 -

  • alloc/initWithObjects ? 用於使用物件初始化陣列。
  • objectAtIndex ? 返回指定索引處的物件。
  • count ? 返回物件數量。

NSMutableArray繼承自NSArray,因此NSArray的所有範例方法都可在NSMutableArray中使用

NSMutableArray的重要方法如下 -

  • removeAllObjects ? 清空陣列。
  • addObject ? 在陣列的末尾插入給定物件。
  • removeObjectAtIndex ? 這用於刪除objectAt指定的索引處的物件。
  • exchangeObjectAtIndex:withObjectAtIndex ? 在給定索引處交換陣列中的物件。
  • replaceObjectAtIndex:withObject ? 用Object替換索引處的物件。

需要記住,上面的列表只是常用的方法,可以到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;
}

執行上面範例程式碼,得到以下結果:

2018-11-16 04:06:24.683 main[69957] The object in array at Index 0 is string1
2018-11-16 04:06:24.684 main[69957] The object in mutableArray at Index 0 is string

在上面的程式中,可以看到NSMutableArrayNSArray之間的簡單區別,並在可變陣列中分配後插入一個字串。

2. 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;
}

執行上面範例程式碼,得到以下結果 -

2018-11-16 04:11:49.006 main[100527] The object for key, key1 in dictionary is string1
2018-11-16 04:11:49.007 main[100527] The object for key, key1 in mutableDictionary is string

3. 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:@"yii", @"bai",@".com",nil];
   NSArray *setArray = [set allObjects];
   NSLog(@"The objects in set are %@",setArray);

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

   [pool drain];
   return 0;
}

執行上面範例程式碼,得到以下結果 -

2018-11-16 04:46:06.667 main[196448] The objects in set are (".com", bai, yii)
2018-11-16 04:46:06.669 main[196448] The objects in mutableSet are (yiibai)