NSCoding歸檔資料持久化儲存

2021-06-23 00:20:50 字數 2417 閱讀 9210

淺拷貝,是物件拷貝的預設的方式。但是,有時候,我們想能夠拷貝乙份值一樣,但是互不影響的物件。那就要用到深拷貝!深拷貝,就是為原物件拷貝乙份結構和值相同的轉殖物件,原物件與轉殖物件占有不同的兩塊空間。這樣,對原物件的修改不會影響到轉殖物件;反之,亦然;

歸檔是指講物件序列化,如此可以將複雜的物件寫入檔案中,然後從中讀取出他們。只要類中實現的每個屬性都是基本資料型別,或者是符合nscoding協議的某個類的例項,就可以對物件進行歸檔。

此部分參考:

實現拷貝,主要用到自己定義的類。因為預設,自己定義的類沒有實現nscopying協議和nsmutablecopying協議。

nscopying協議:                   - (id)copywithzone:(nszone *)zone;

nsmutablecopying協議:      - (id)mutablecopywithzone:(nszone *)zone;

分別用來實現不可變物件的拷貝和可變物件的拷貝。

要實現自己類的拷貝,就要實現響應的協議,並且重寫協議的響應方法

@inte***ce addresscard : nsobject

在*.m中實現協議:

#pragma mark- nscopying

- (id)copywithzone:(nszone *)zone

#pragma mark- nsmutablecopying

- (id)mutablecopywithzone:(nszone *)zone

使用時:

addresscard *clonecard=[card1 copy];

nscoding是乙個可以自己實現的協議,通過擴充套件你的資料類來支援encode和decode,目的是為了把資料寫進資料快取,儲存到磁碟中。

比如

- (void)encodewithcoder:(nscoder *)acoder

- (id)initwithcoder:(nscoder *)adecoder

return self;

}

為自己開闢一塊空的空間,用zone佔位

- (id)copywithzone:(nszone *)zone

//在.h和.m檔案中實現

//然後取到document路徑

nsstring *documentspath = [nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) objectatindex:0];

//拼接plist的路徑

//儲存資料

chperson *person = [[chperson alloc]init];

person.name = self.nametext;

person.age = self.agetext;

person.*** = self.***text;

//建立nskeyedarchiver編碼物件keyedarchiver,告訴其裝載資料的資料物件data

nsmutabledata *data = [[nsmutabledata alloc]init];

nskeyedarchiver *keyedarchiver = [[nskeyedarchiver alloc]initforwritingwithmutabledata:data];

//使用"鍵-值"對編碼,儲存希望儲存的person 即歸檔

[keyedarchiver encodeobject:person forkey:@"data"];

//結束歸檔

[keyedarchiver finishencoding];

//寫入資料到歸檔檔案

[data writetofile:plistpath atomically:yes];

//歸檔檔案中讀資料,建立解碼物件

nsdata *data = [[nsdata alloc]initwithcontentsoffile:plistpath];

nskeyedunarchiver *keyedunarchiver = [[nskeyedunarchiver alloc]initforreadingwithdata:data];

//從解碼物件中獲得解碼後的內容,給物件

chperson *person = [keyedunarchiver decodeobjectforkey:@"data"];

//結束解碼

[keyedunarchiver finishdecoding];

//然後就可以取person的屬性了
參考:

資料持久化 歸檔

ios提供的資料持久化方式有 sqlitecoredata屬性列表 nsuserdefault物件歸檔。這裡來簡單介紹下 ios開發 中的物件歸檔 物件歸檔是將物件歸檔以檔案的形式儲存到磁碟中 也稱為序列化,持久化 使用的時候讀取該檔案的儲存路徑讀取檔案的內容 也稱為接檔,反序列化 物件歸檔的檔案是...

資料持久化,歸檔,反歸檔

資料持久化的本質 將資料讀成檔案儲存在本地 沙盒機制 就是系統針對每個應用程式在本地生成的資料夾 名字隨機生成 對於不同的應用程式 不能訪問其他應用程式沙盒的內容 起到保護作用 1 documents 用來儲存長久儲存的資料 b perferences 儲存使用者的偏好設定 比如程式是否是第一次啟動...

iOS資料持久化 歸檔

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