Objective-C 数据存储

  • 数据存储

    数据存储及其检索是任何程序中最重要的一项。在Objective-C中,我们通常不依赖链表之类的结构,因为它会使工作变得复杂。相反,我们使用NSArray,NSSet,NSDictionary及其可变形式之类的集合。
  • NSArray和NSMutableArray

    NSArray用于保存不可变的对象数组,NSMutableArray用于保存可变的对象数组。可变性有助于在运行时将数组更改为预分配的数组,但是如果使用NSArray,则仅替换现有数组,而不能更改现有数组的内容。NSArray的重要方法如下
    • alloc/initWithObjects - 用于初始化带有对象的数组。
    • objectAtIndex - 返回特定索引处的对象。
    • count - 返回对象数
    NSMutableArray继承自NSArray,因此NSSMutableArray中提供了NSArray的所有实例方法,NSMutableArray的重要方法如下-
    • removeAllObjects - 清空数组。
    • addObject - 在数组的末尾插入一个给定的对象。
    • removeObjectAtIndex - 用于删除特定索引处的object
    • 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;
    }
    
    现在,当我们编译并运行程序时,我们将得到以下结果。
    
    2020-08-24 11:28:46.377 helloWorld[8028:9036] The object in array at Index 0 is string1
    2020-08-24 11:28:46.383 helloWorld[8028:9036] The object in mutableArray at Index 0 is string
    
    在上面的程序中,我们看到了NSMutableArrayNSArray的简单区别,我们可以在分配可变数组后插入字符串。
  • NSDictionary和NSMutableDictionary

    NSDictionary用于保存对象的不可变字典,而NSMutableDictionary用于保存对象的可变字典。NSDictionary的重要方法如下-
    • alloc/initWithObjectsAndKeys-用从指定的一组值和键构成的条目初始化一个新分配的字典。
    • valueForKey-返回与给定键关联的值。
    • count-返回字典中的条目数。
    NSMutableDictionary继承自NSDictionary,因此NSMutableDictionary中提供了NSDictionary的所有实例方法,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;
    }
    
    现在,当我们编译并运行程序时,我们将得到以下结果。
    
    2020-08-24 11:35:33.907 helloWorld[10084:124] The object for key, key1 in dictionary is string1
    2020-08-24 11:35:33.913 helloWorld[10084:124] The object for key, key1 in mutableDictionary is string
    
  • NSSet和NSMutableSet

    NSSet用于保存不可变对象的不可变集合,而NSMutableDictionary用于保存可变对象的可变集。NSSet的重要方法如下-
    • alloc/initWithObjects-用从指定对象列表中获取的成员初始化一个新分配的集合。
    • allObjects-返回一个包含集合成员的数组;如果集合没有成员,则返回一个空数组。
    • count-返回集合中的成员数。
    NSMutableSet继承自NSSet,因此NSMutableSet中提供了NSSet的所有实例方法。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;
    }
    
    现在,当我们编译并运行程序时,我们将得到以下结果。
    
    2020-08-24 11:39:14.946 helloWorld[3148:7700] The objects in set are (string3, string2, string1)
    2020-08-24 11:39:14.952 helloWorld[3148:7700] The objects in mutableSet are (string1)