是資料的永久儲存;為什麼要做資料持久化:儲存在記憶體中的資料,程式關閉,記憶體釋放,資料丟失。這種資料是臨時的;資料持久化的本質:資料儲存成檔案,儲存到程式的沙盒。
nssearchpathfordirectoriesindomains(nssearchpathdirectory directory,nssearchpathdomainmask domainmask,bool expandtilde);
nshomedirectory——————->沙盒主路徑
nsdocumentdirectory————>documents資料夾
nslibrarydirectory——————>library資料夾
nscachesdiectory——————>caches資料夾
nstemporarydirectory()———>tmp資料夾
// 列印沙盒的每個資料夾路徑
- (void)path
// 簡單物件的寫入
// 系統類例項出來的物件 叫簡單物件
// 例如:字串 陣列 字典 二進位制物件(nsdata)
// 如果要寫入乙個陣列或者字典等容器類物件
// 那麼這個容器當中也要儲存是 簡單物件才能寫入
- (void)writefile
; [dic writetofile:dicpath atomically:yes];
nslog(@"%@", dicpath);
// 寫入data資料
nsstring *datastr = @"哈哈哈";
nsdata *data = [datastr datausingencoding:nsutf8stringencoding];
[data writetofile:datapath atomically:yes];
nslog(@"%@", datapath);
// data 檔案一般是 儲存 的
// uiimagepngrepresentation 把轉化成nsdata
nsdata *imagedata = uiimagepngrepresentation([uiimage imagenamed:@"w4"]);
[imagedata writetofile:imagepath atomically:yes];
nslog(@"%@", imagepath);
// 讀取資料
- (void)readfile
}
管理檔案的乙個類
單例類
可以對檔案進行 建立 移動 複製 刪除
// 建立資料夾方法
- (void)createfile
// 移動資料夾
- (void)movefile
// 拷貝資料夾
- (void)copyfile
// 刪除資料夾
- (void)removefile
// 判斷資料夾是否存在
- (void)i***ist
複雜物件寫入步驟:
1.遵守 nscoding(需要在寫入的時候 按照一定的規則 進行寫入 一定的編碼格式去寫入) 歸檔與反歸檔(序列與反序列)
2.重寫(協議中) 歸檔 與 反歸檔方法
3.建立乙個複雜物件出來
4.建立乙個歸檔物件
5.把複雜物件利用歸檔物件 轉化成data
6.把data寫入檔案 進行資料持久化
新建乙個類繼承於nsobject
新增屬性
@property (nonatomic, retain) nsstring *name;
@property (nonatomic, assign) nsinteger age;
@property (nonatomic, retain) nsdata *imagedata;
在.m檔案中
// 歸檔方法
- (void)encodewithcoder:(nscoder *)acoder
// 反歸檔方法
- (id)initwithcoder:(nscoder *)adecoder
return
self;
}
在rootviewcontroller.m中
// 複雜物件的寫入檔案
// 自己建立出來的類(例如)student類
// 寫入的核心思想:
// 把複雜物件 轉化成 簡單物件 進行寫入
// 一般轉換成nsdata物件進行寫入
// 建立乙個可變data
nsmutabledata *data = [nsmutabledata data];
// 建立乙個歸檔物件
nskeyedarchiver *archiver = [[nskeyedarchiver alloc] initforwritingwithmutabledata:data];
// 將複雜物件 通過歸檔物件 轉化成data
[archiver encodeobject:stu forkey:@"student"];
// 完成歸檔
[archiver finishencoding];
// 注意:
// 實際上 通過 歸檔物件 把 複雜物件 寫入 data中
// 並且寫入的標識 就key
// 歸檔與反歸檔不是資料持久化
// 只是把複雜物件 按照系統編碼格式 轉化成data
// 真正持久化 還是寫入檔案
//nslog(@"%@", data);
// 獲取路徑
nsstring *documentpath = [nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) lastobject];
// 拼接路徑
// 寫入檔案
[data writetofile:path atomically:yes];
// 釋放歸檔物件
[archiver release];
nslog(@"%@", path);
// 反歸檔
// 從沙盒中讀取data資料
nsdata *newdata = [nsdata datawithcontentsoffile:path];
// 建立反歸檔物件(利用data建立)
nskeyedunarchiver *unarchiver = [[nskeyedunarchiver alloc] initforreadingwithdata:newdata];
// 利用反歸檔物件 反歸檔出複雜物件
student *stunew = [unarchiver decodeobjectforkey:@"student"];
// 呼叫完成 返回歸檔
[unarchiver finishdecoding];
[unarchiver release];
uiimage *image = [uiimage imagewithdata:stunew.imagedata];
// 如何把乙個陣列的 複雜物件 寫到檔案中
// 便利這個陣列 把每乙個複雜物件
// 轉化成簡單物件(data)
// 然後 再將data 儲存到乙個陣列中
// 最後 直接把陣列寫到檔案中 進行持久化
初級資料持久化
沙盒機制 列印沙盒的各個資料夾路徑 void path 簡單物件的寫入 系統的類例項出來的物件 叫簡單物件 例如 字串 陣列 字典 二進位制物件 nsdata 如果要寫入乙個陣列 或者 字典 等容器類物件 那麼這個容器當中 也要儲存是 簡單物件才能寫入 void writefile dic writ...
初級資料的持久化
本章部落格我主要是把ui後期初級資料持久化的一些基本使用總結了下,這裡主要分享了沙盒機制的概念,簡單物件不同情況下的寫入,複雜物件的寫入,以及data與二進位制 之間相互轉化的方法,希望可以幫到大家。一 沙盒機制 1.每個應用程式位於檔案系統的嚴格限制部分 2.每個應用程式只能在為該程式建立的檔案系...
TwistedFate 初級資料持久化
沙盒機制 開啟沙盒的各個資料夾路徑 void path簡單物件的寫入 void writefile dic writetofile dicpath atomically yes 寫入data nsstring datastr 且隨疾風前行 nsdata data datastr datausinge...