1、概述
使用archiverootobject:tofile:方法可以將乙個物件直接寫入到乙個檔案中,但有時候可能想將多個物件寫入到同乙個檔案中,那麼就要使用nsdata來進行歸檔物件。
nsdata可以為一些資料提供臨時儲存空間,以便隨後寫入檔案,或者存放從磁碟讀取的檔案內容。可以使用[nsmutabledata data]建立可變資料空間。
2、歸檔2個person物件到同一檔案中
歸檔(編碼):
// 新建一塊可變資料區
nsmutabledata*data = [nsmutabledatadata];
// 將資料區連線到乙個nskeyedarchiver物件
nskeyedarchiver*archiver = [[[nskeyedarchiveralloc]initforwritingwithmutabledata:data] autorelease];
// 開始存檔物件,存檔的資料都會儲存到nsmutabledata中
[archiverencodeobject:person1forkey:@"person1"];
[archiverencodeobject:person2forkey:@"person2"];
// 存檔完畢(一定要呼叫這個方法)
[archiverfinishencoding];
// 將存檔的資料寫入檔案
[datawritetofile:path atomically:yes];
3、從同一檔案中恢復2個person物件
恢復(解碼):
// 從檔案中讀取資料
nsdata *data = [nsdatadatawithcontentsoffile:path];
// 根據資料,解析成乙個nskeyedunarchiver物件
nskeyedunarchiver*unarchiver = [[nskeyedunarchiveralloc]initforreadingwithdata:data];
person *person1 = [unarchiverdecodeobjectforkey:@"person1"];
person *person2 = [unarchiverdecodeobjectforkey:@"person2"];
// 恢復完畢
[unarchiverfinishdecoding];
4、利用歸檔實現深複製
比如對乙個person物件進行深複製:
// 臨時儲存person1的資料
nsdata *data =
[nskeyedarchiverarchiveddatawithrootobject:person1];
// 解析data,生成乙個新的person物件
student *person2 =
[nskeyedunarchiverunarchiveobjectwithdata:data];
// 分別列印記憶體位址
nslog(@"person1:0x%x", person1); // person1:0x7177a60
nslog(@"person2:0x%x", person2); // person2:0x7177cf0
iOS開發之資料儲存
xml屬性列表 plist 歸檔 preference 偏好設定 本質還是通過 plist 來儲存資料,但是使用更簡單 無需關注檔案 資料夾路徑和名稱 nskeyedarchiver歸檔 nscoding 把任何物件,直接儲存為檔案的方式。sqlite3 當非常大量的資料儲存時使用 core dat...
iOS開發之資料儲存之NSData
1 概述 使用archiverootobject tofile 方法可以將乙個物件直接寫入到乙個檔案中,但有時候可能想將多個物件寫入到同乙個檔案中,那麼就要使用nsdata來進行歸檔物件。nsdata可以為一些資料提供臨時儲存空間,以便隨後寫入檔案,或者存放從磁碟讀取的檔案內容。可以使用 nsmut...
iOS資料儲存之NSUserDefault
建立乙個user defaults方法有多個,最簡單得快速建立方法 nsuserdefaults mydefaults nsuserdefaults standarduserdefaults 新增資料到 userdefaults mydefaults setobject namefield.text...