在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 對自定...