iOS開發 資料持久化 歸檔

2021-07-04 02:37:26 字數 2875 閱讀 3540

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

nscoding協議

要想使用物件歸檔,需要歸檔的物件就要實現nscoding協議,實現nscoding協議需要實現它的兩個方法:

- (void)encodewithcoder:(nscoder *)acoder;//寫入資料

- (id)initwithcoder:(nscoder *)adecoder;//讀取資料

我們可以將物件的屬性寫入nscoder物件中,也可以從其中讀取寫入的資料,nscoder中包含了許多方法,其中:

- (void)encodeobject:(id)objv forkey:(nsstring *)key;

- (void)encodebool:(bool)boolv forkey:(nsstring *)key;

- (void)encodeint:(int)intv forkey:(nsstring *)key;

- (void)encodeint32:(int32_t)intv forkey:(nsstring *)key;

- (void)encodeint64:(int64_t)intv forkey:(nsstring *)key;

- (void)encodefloat:(float)realv forkey:(nsstring *)key;

- (void)encodedouble:(double)realv forkey:(nsstring *)key;

可以將各種型別的物件寫入到nscoder物件中,並將其與key關聯起來,而:

- (id)decodeobjectforkey:(nsstring *)key;

- (bool)decodeboolforkey:(nsstring *)key;

- (int)decodeintforkey:(nsstring *)key;

- (int32_t)decodeint32forkey:(nsstring *)key;

- (int64_t)decodeint64forkey:(nsstring *)key;

- (float)decodefloatforkey:(nsstring *)key;

- (double)decodedoubleforkey:(nsstring *)key;

則可以將nscoder中的物件使用key讀取出來。

物件歸檔

而歸檔物件,需要使用

[nskeyedarchiver archiverootobject:object tofile:path];
將object物件歸檔到path檔案中。逆歸檔則需要使用

[nskeyedunarchiver unarchiveobjectwithfile:path];
將path檔案中的物件讀取出來。

基本的物件歸檔流程就是這樣,之後是我的乙個示例:

#import @inte***ce studentmodel : nsobject @property (nonatomic, strong) nsstring* name;

@property (nonatomic, strong) nsstring* stuid;

@property (nonatomic, assign) nsinteger age;

@end

#import "studentmodel.h"

@implementation studentmodel

#pragma mark -- nscoding

- (instancetype)initwithcoder:(nscoder *)adecoder

return self;

}- (void)encodewithcoder:(nscoder *)acoder

@end

#import "viewcontroller.h"

#import "studentmodel.h"

@inte***ce viewcontroller ()

@end

@implementation viewcontroller

- (void)viewdidload

#pragma mark -- response

- (ibaction)touchunarchivebtn:(id)sender

#pragma mark -- method

- (void)archivedstudent

- (void)unarchivedstudent

@end

附上列印結果:

2015-07-26 09:04:06.163 nscodingtest[7679:7139551] name:小明

2015-07-26 09:04:06.164 nscodingtest[7679:7139551] studentid:20121001047

2015-07-26 09:04:06.165 nscodingtest[7679:7139551] age:21

iOS資料持久化 歸檔

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

iOS資料持久化之歸檔

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

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

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