iOS開發之資料儲存之NSData

2021-09-23 19:31:45 字數 2298 閱讀 5205

1、概述

使用archiverootobject:tofile:方法可以將乙個物件直接寫入到乙個檔案中,但有時候可能想將多個物件寫入到同乙個檔案中,那麼就要使用nsdata來進行歸檔物件。

nsdata可以為一些資料提供臨時儲存空間,以便隨後寫入檔案,或者存放從磁碟讀取的檔案內容。可以使用[nsmutabledata data]建立可變資料空間。

2、歸檔2person物件到同一檔案中

歸檔(編碼):

// 新建一塊可變資料區

nsmutabledata*data = [nsmutabledatadata];

// 將資料區連線到乙個nskeyedarchiver物件

nskeyedarchiver*archiver = [[[nskeyedarchiveralloc]initforwritingwithmutabledata:data] autorelease];

// 開始存檔物件,存檔的資料都會儲存到nsmutabledata中

[archiverencodeobject:person1forkey:@"person1"];

[archiverencodeobject:person2forkey:@"person2"];

// 存檔完畢(一定要呼叫這個方法)

[archiverfinishencoding];

// 將存檔的資料寫入檔案

[datawritetofile:path atomically:yes];

3、從同一檔案中恢復2person物件

恢復(解碼):

// 從檔案中讀取資料

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...