歸檔(序列化),把物件轉為位元組碼,以檔案的形式儲存到磁碟上;程式執行過程中或者當再次開啟程式的時候,可以通過解歸檔(反序列化)還原這些物件。只要遵循了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***ceperson
:nsobject
<
nscoding
>
@property
(copy
,nonatomic
)nsstring
*name
;@property
(copy
,nonatomic
)nsstring
*gender
;@property
(assign
,nonatomic
)int
age;
@end
@implementationperson
//實現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 對自定...