IOS開發中的歸檔與反歸檔

2021-06-23 05:54:01 字數 1717 閱讀 6677

歸檔」

是物件的⼀一種序列化⽅方式,對模型物件進⾏行歸檔 的技術可以輕鬆將複雜的物件寫⼊入⽂檔案,然後再從⽂檔案 中讀取它們。 

要求類中要進⾏行歸檔的屬性或者成員變數是基本資料類 型(如

int或

float

等)或者符合

nscoding

協議的某個類 的物件(如

nsstring

或nsarray

等)。 

原理:將複雜物件轉換為

nsdata

,然後寫⼊入到硬碟。 為了讀取的時候恢復寫⼊入資料,需要對寫⼊入資料進⾏行編 碼和解碼 

自定義類的物件要實現歸檔,該類需要確認

nscoding

協議,並且實現協議中的兩個⽅方法:

-encodewithcoder:

歸檔編碼時呼叫

-initwithcoder:

反歸檔解碼時呼叫

歸檔類:

nskeyedarchiver

反歸檔類:

nskeyedunarchiver

//自定義兩個自定義類成員變數

p1=[[lpfperson alloc]initwithname:@"

張三" age:54];p2=[[lpfperson alloc]initwithname:@"

李四" age:43];

//歸檔

//獲取要將data儲存的位址

nsstring *str=[nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) lastobject];nsmutabledata *data=[[nsmutabledata alloc]init];nskeyedarchiver *archiver=[[nskeyedarchiver alloc]initforwritingwithmutabledata:data];[archiver encodeobject:p1 forkey:@"p1key"];[archiver encodeobject:p2 forkey:@"p2key"];[archiver finishencoding];

//反歸檔

//獲取data資料儲存位址

nsstring *str=[nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) lastobject];

//lpfperson *per1 =(lpfperson*)[unarchiver decodeobjectforkey:@"p1key"];lpfperson *per2=(lpfperson *)[unarchiver decodeobjectforkey:@"p2key」];

優點:功能比普通⽂檔案儲存⽅方式相對強⼤大,解決了自定義類的儲存問題。

缺點:操作略微複雜,查詢資料不⽅方便(不能直接查詢某個物件的屬性,⽽而是需要把所有歸檔物件都讀出來然後再去找屬性)

歸檔與反歸檔

建立一對.h m檔案nsobject h中遵守nscoding協議 定義屬性 在.m檔案中 反序列比 id initwithcoder nscoder adecoder return self 序列比 void encoderwithcoder nscoder acoder 在需要使用的地方 m 使...

IOS之資料持久化(歸檔與反歸檔)

物件歸檔的檔案是保密的磁碟上無法檢視檔案中的內容,而屬性列表是明文的可以檢視 物件歸檔有兩種方式 1 對foundat中物件進行歸檔 乙個檔案只能儲存乙個物件 2 自定義物件歸檔 可以儲存多個物件 下面是自定義歸檔 類的.h檔案中遵守協議 宣告三個物件 import inte ce student ...

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

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