iOS資料持久化 歸檔

2021-07-11 02:12:46 字數 4266 閱讀 6267

歸檔(序列化),把物件轉為位元組碼,以檔案的形式儲存到磁碟上;程式執行過程中或者當再次開啟程式的時候,可以通過解歸檔(反序列化)還原這些物件。只要遵循了nscoding協議的物件都可以通過它實現序列化,由於絕大多數支援儲存資料的foundation和cocoa touch類都遵循了nscoding協議,因此,對於大多數類來說,歸檔相對而言還是比較容易實現的。

//獲得沙盒路徑

nsstring

*documentpath =[

nssearchpathfordirectoriesindomains

(nsdocumentdirectory

,nsuserdomainmask

,yes

)objectatindex:0

];//獲取檔案路徑,由於歸檔後檔案會加密,所以檔案字尾可以任意取

nsstring

*filepath =[

:@"file.archiver"

];//建立乙個字典,用來歸檔

nsdictionary

*archivedic =@;

//呼叫nskeyedarchiver的類方法archiverootobject:tofile:將物件歸檔(返回乙個布林值)

if([

nskeyedarchiver

archiverootobject

:archivedic tofile

:filepath

])//呼叫nskeyedunarchiver的類方法unarchiveobjectwithfile:將檔案解檔

nsdictionary

*unarchivedic =[

nskeyedunarchiver

unarchiveobjectwithfile

:filepath

];nslog

(@"%@"

,unarchivedic

);

//獲得沙盒路徑

nsstring

*documentpath =[

nssearchpathfordirectoriesindomains

(nsdocumentdirectory

,nsuserdomainmask

,yes

)objectatindex:0

];//獲取檔案路徑,由於歸檔後檔案會加密,所以檔案字尾可以任意取

nsstring

*filepath =[

:@"file.archiver"

];//建立乙個mutabledata物件用於存放需要歸檔的資料

nsmutabledata

*archivedata =[

nsmutabledata

data

];//建立乙個nskeyedarchiver類的物件archiver,用來對歸檔物件進行編碼,編碼完成才能進行歸檔

nskeyedarchiver

*archiver =[[

nskeyedarchiver

alloc

]initforwritingwithmutabledata

:archivedata];[

archiver encodeobject

:@"jack"

forkey

:@"name"];[

archiver encodeint:20

forkey

:@"age"];[

archiver encodefloat

:72.5

forkey

:@"weight"

];//完成編碼

[archiver finishencoding

];//將archivedata物件寫入檔案,完成歸檔

if([

archivedata writetofile

:filepath atomically

:yes

])//建立nsdata物件來接收解檔檔案

nsdata

*unarchivedata =[

nsdata

datawithcontentsoffile

:filepath

];//建立乙個nskeyedunarchiver物件unarchiver,用來對需要解檔的物件進行解碼,解碼後就能還原原物件的資料型別

nskeyedunarchiver

*unarchiver =[[

nskeyedunarchiver

alloc

]initforreadingwithdata

:unarchivedata

];nsstring

*name =[

unarchiver decodeobjectforkey

:@"name"

];int

age =[

unarchiver decodeintforkey

:@"age"

];float

weight =[

unarchiver decodefloatforkey

:@"weight"

];nslog

(@"name = %@, age = %d, weight = %.2f"

,name

,age

,weight

);

@inte***ce

person

:nsobject

<

nscoding

>

@property

(copy

,nonatomic

)nsstring

*name

;@property

(copy

,nonatomic

)nsstring

*gender

;@property

(assign

,nonatomic

)int

age;

@end

@implementation

person

//實現nscoding協議中的歸檔方法-(

void

)encodewithcoder

:(nscoder

*)acoder

//實現nscoding協議中的解檔方法-(

nullable instancetype

)initwithcoder

:(nscoder

*)adecoder

return

self;}

@end

//獲得沙盒路徑

nsstring

*documentpath =[

nssearchpathfordirectoriesindomains

(nsdocumentdirectory

,nsuserdomainmask

,yes

)objectatindex:0

];//獲取檔案路徑,由於歸檔後檔案會加密,所以檔案字尾可以任意取

nsstring

*filepath =[

:@"file.archiver"

];//自定義物件

person

*person =[[

person

alloc

]init

];person

.name =@

"jack"

;person

.gender =@

"male"

;person

.age =20

;//歸檔

if([

nskeyedarchiver

archiverootobject

:person tofile

:filepath

])//解檔,person2例項接收解檔後的物件

person

*person2 =[

nskeyedunarchiver

unarchiveobjectwithfile

:filepath

];nslog

(@"name = %@, gender = %@, age = %d"

,person2

.name

,person2

.gender

,person2

.age

);

iOS開發 資料持久化 歸檔

在ios開發過程中,很多時候都需要進行一些資料的儲存和讀入,在資料量不大的情況下,使用plist儲存資料是一種很方便的方式,但是plist只能允許儲存一些系統自帶的資料型別,如果需要儲存自定義的資料型別,plist是是用不了的,但是可以使用另外一種資料持久化的方法 物件歸檔。nscoding協議 要...

iOS資料持久化之歸檔

ios的資料持久化的寫入只支援4種基本型別,並且nsarray,與nsdictionary裡面存的資料也必須是這四種基本型別,那麼如果我們要將物件等寫入到沙盒中我們應該怎麼做呢?下面我們來共同學習一下 在處理這一類的問題時,我們運用的是歸檔的方法來實現的 歸檔的實質就是將資料型別轉換成nsdata型...

iOS 資料持久化方式 歸檔 反歸檔

那麼ios的資料化持久方式有哪些呢?1 屬性列表 plist檔案 nsuserdefault 2 歸檔 nskeyedarchiver 3 資料庫 sqlite,coredata,fmdb 第三方 今天重點說下歸檔和結檔的問題 歸檔的三種方式 1 對foundation框架的物件進行歸檔 2 對自定...