UI基礎 初級資料持久化

2021-07-08 16:51:52 字數 3974 閱讀 2411

是資料的永久儲存;為什麼要做資料持久化:儲存在記憶體中的資料,程式關閉,記憶體釋放,資料丟失。這種資料是臨時的;資料持久化的本質:資料儲存成檔案,儲存到程式的沙盒。

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...