1 前言
今天我们介绍一下IOS中一些常见的数据操作。
2 详述
2.1 深度复制
有时候会发送一个 -copy 消息来进行集合的赋值,但这样往往得到的是一个浅拷贝。这样赋值得到的集合可以对原始集合中的对象就行修改,但这些对象往往在多个集合中是共享的。
深度赋值一个集合,需要用到copy items方法。例如:对于NSArray,需要使用 -initWithArray:copyItems:方法。
NSArray* original = [NSArray arrayWithObjects:@"A",@"B",nil];
NSArray* shallowCopy = [original copy];
NSArray* deepCopy = [[NSArray alloc] initWithArray:original copyItems:YES];
在shallowCopy中,其中两个对象与original中的一样。而在deepCopy中,则有两个新的“A”和“B”实例。
NSDictionary和NSSet具有相同的模式,都有-initWithDictionary:copyItems:和-initWithDictionary:copyItems:方法。
2.2 属性列表
NSArray和NSDictionary都提供了-writeToFile:atomically:方法来保存集合,也提供了+arrayWithContentsOfFile:和+dictionaryWithContentsOfFile:方法用以读取文件中的内容。
属性列表(property list)是一个标准的格式,是Cocoa Touch中的一种轻量便携式的持续机制。属性列表使用一个.plist后缀的文件夹来存储对象实例。
使用属性列表时,重要的是使用一下几个类:NSArray,NSDictionary,NSString,NSData,NSDate和NSNumber。这些对象可以存储到文件中。
2.3 MutableCopy
IOS中字符串或者集合都分为可变和不可变两种,如NSString和NSMutableString,如果想让一个不可变的数据变为可变,可以使用-mutableCopy方法,例如:
NSArray* characters = [NSArray arrayWithObjects:@"A",@"B",nil];
NSMutableArray* mutableCharacters = [characters mutableCopy];
在处理集合的时候,-mutableCopy和-copy一样,执行的是浅拷贝。
注意,并不能对任意对象生成可变的拷贝,被复制的类需要支持NSMutableCopy协议。所有值对象和集合都支持该协议。
2.4 使用copy保护我们的数据
加入上面创建的mutableCharacters被使用,如果我们不小心把他的副本修改了可能会导致程序混乱,我们可以用下面方式来保护其不受破坏:
NSArray* result = (NSArray*)[[mutableCharacters copy] autorelease ];
这样我们就又可以把可变的数组转化为不可变,而其他人无法修改该数组了。
3 结语
以上是所有内容,希望对大家有所帮助。