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
在上面的程序中,我们看到了NSMutableArray和NSArray的简单区别,我们可以在分配可变数组后插入字符串。 -
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)