天天看点

iPhone App开发实战手册学习笔记(4)之数据处理1 前言2 详述3 结语

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 结语

以上是所有内容,希望对大家有所帮助。