淺拷貝,是物件拷貝的預設的方式。但是,有時候,我們想能夠拷貝乙份值一樣,但是互不影響的物件。那就要用到深拷貝!深拷貝,就是為原物件拷貝乙份結構和值相同的轉殖物件,原物件與轉殖物件占有不同的兩塊空間。這樣,對原物件的修改不會影響到轉殖物件;反之,亦然;
歸檔是指講物件序列化,如此可以將複雜的物件寫入檔案中,然後從中讀取出他們。只要類中實現的每個屬性都是基本資料型別,或者是符合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協議...