資料持久化

2021-07-10 23:24:09 字數 4124 閱讀 8929

檔案的路徑有幾種方式獲取, 比如直接從工程拽出來的路徑是當前工程資料夾的路徑, 這個路徑會隨著工程的移動而發生變化

也可通過 nsbundle 獲取, bundle 可以獲取工程裡檔案的路徑, 這個路徑不會隨著工程的移動而變化

如果要做手機的快取, 或者收藏功能, 上面兩個路徑是不能辦到的, 我們需要把較為私密的內容放到手機的沙盒裡進行儲存

nslog(@"%@",

nshomedirectory());

在沙盒檔案裡一般有三個大的資料夾

documents 資料夾: 用於儲存使用者的一些資訊, 比如收藏的內容, 設定資訊. 做收藏功能時, 往這個資料夾裡放

library 資料夾: 這個資料夾一般是開發者使用, 儲存程式設計師要儲存的內容

caches 資料夾:library 裡的資料夾, 一般放快取的資訊, 比如網路載入的, 清除快取功能就是刪除這個資料夾裡的內容

preferences 資料夾是設定資料夾, nsuserdefauls 這個類的內容儲存在這個資料夾裡

tmp資料夾: 儲存臨時檔案

// 簡單物件寫入到本地: 指字典, 陣列, 字串等

nsstring *str = @"事實上大大";

// 1.找沙盒路徑

// 引數1: 指定要去的資料夾, 這個列舉是電腦和手機通用的類, 如果要去 documents 資料夾則nsdocumentdirectory, 去 caches 資料夾, 則nscachesdirectory

// 引數2: 資料夾型別, 第乙個是 使用者型別

// 引數3: 絕對路徑(yes), 這個路徑是給系統用的, 通過這個路徑可以找到對應的資料夾. 相對路徑(no), 這個路徑給開發者用的, 通過這個路徑能知道要前往的資料夾

nsarray *sandbox = nssearchpathfordirectoriesindomains( nsdocumentdirectory, nsuserdomainmask, yes);

nslog(@"%@", sandbox);

nsstring *path = [sandbox lastobject];

nslog(@"%@", path);

// 拼接乙個用來顯示文字內容的檔案路徑

// 第一種

nslog(@"%@", docpath);

// 第二種

nslog(@"%@", docpath1);

// 把字串寫入

[str writetofile:docpath atomically:yes encoding:nsutf8stringencoding error:nil];

// 讀取本地字串內容

nsstring *tempstr = [nsstring stringwithcontentsoffile:docpath encoding:nsutf8stringencoding error:nil];

nslog(@"%@", tempstr);

// 陣列寫入本地

nsarray *arr = @[@"1", @"2", @"3", @"4"];

nsarray *sandbox = nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes);

nsstring *path = [sandbox lastobject];

nslog(@"%@", path);

// 拼接檔案路徑

// 把陣列物件寫入到本地

[arr writetofile:docpath atomically:yes];

// 1. 找沙盒路徑

// 2. 拼接檔案的路徑

// 3. 寫入

nsarray *temparr = [nsarray arraywithcontentsoffile:docpath];

nslog(@"%@", temparr);

// student類必須簽訂nscoding協議

// 資料持久化必須實現的方法

- (void)encodewithcoder:(nscoder *)acoder

- (nullable instancetype)initwithcoder:(nscoder *)adecoder

return

self;

}

student *stu1 = [[student alloc] init];

stu1.name = @"haha";

stu1.*** = @"man";

stu1.age = 16;

nsarray *sandbox = nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes);

nsstring *path = [sandbox lastobject];

// 寫入, 歸檔, 序列化

[nskeyedarchiver archiverootobject: stu1 tofile:docpath];

nslog(@"%@", docpath);

// 讀取, 反歸檔, 反序列化

student *backstu = [nskeyedunarchiver unarchiveobjectwithfile: docpath];

nslog(@"%@", backstu.name);

陣列中儲存複雜物件

student *stu2 = [[student alloc] init];

stu2.name = @"xixi";

stu2.*** = @"woman";

stu2.age = 889;

student *stu3 = [[student alloc] init];

stu3.name = @"popo";

stu3.*** = @"girl";

stu3.age = 55;

nsarray *stuarr = @[stu1, stu2, stu3];

// 陣列儲存複雜物件: 直接對陣列進行歸檔操作

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

[nskeyedarchiver archiverootobject: stuarr tofile:docpath1];

nsarray *stuunarchive = [nskeyedunarchiver unarchiveobjectwithfile:docpath1];

[stuunarchive enumerateobjectsusingblock:^(student * obj, nsuinteger idx, bool * _nonnull stop) ];

// 檔案管理

// 建立乙個檔案管理器

nsfilemanager *manager = [nsfilemanager defaultmanager];

// 拼接乙個資料夾路徑

// 建立乙個資料夾

[manager createdirectoryatpath:filepath withintermediatedirectories:yes attributes:nil error:nil];

nsstring *writestr = @"wo le ge qu";

[writestr writetofile: docwritestr atomically:yes encoding:nsutf8stringencoding error:nil];

nsstring *xxstr = [nsstring stringwithcontentsoffile:docwritestr encoding:nsutf8stringencoding error:nil];

nslog(@"%@", xxstr);

nslog(@"%d", [manager removeitematpath:docwritestr error:nil]);

資料持久化

資料持久化就是將記憶體中的資料模型轉換為儲存模型,以及將儲存模型轉換為記憶體中的資料模型的統稱.資料模型可以是任何資料結構或物件模型,儲存模型可以是關係模型 xml 二進位製流等。cmp和hibernate只是物件模型到關係模型之間轉換的不同實現。只不過物件模型和關係模型應用廣泛,所以就會誤認為資料...

資料持久化

首先是cocos2d x自己封閉的ccuserdefault跨平台的檔案儲存類,它是用的xml格式,具體操作非常類似於應用開發的ini檔案,可操作性不是很強,如果訪問比較複雜的資料,那就得自己動手去解析乙個字串,下面是示例 基本一看就懂 void userdefaulttest dotest els...

資料持久化

資料持久化是通過檔案將資料儲存在磁碟上 ios有四種資料持久化方式 1.屬性列表 property list 簡單易用,適合小資料量的儲存和查詢操作,但是不適合大量資料的儲存.屬性列表 1屬性列表 property list nsarray plist name age 指定儲存的地方 nsstri...