天天看點

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 結語

以上是所有内容,希望對大家有所幫助。