資料持久化技術 一)

2021-08-22 02:31:06 字數 4108 閱讀 8178

資料持久化技術

持久化(persistent): 記憶體資料儲存到磁碟(記憶體/變數儲存到沙盒的某個檔案中)實現將程式產生的資料儲存,下次再次開啟儲存資料仍能訪問這些儲存下來的資料,例如:記住登陸名和密碼,訊息記錄

記憶體資料 —> 五種選擇方案 —> 磁碟(沙盒某個檔案)

一. nsuserdefaults

是什麼?

系統提供的乙個類, 將記憶體的資料儲存沙盒中; 在任何時候將儲存的資料取出

支援基本資料型別: nsstring; nsnumber; nsdate; nsarray;nsdictionary…

怎麼用? (單例 + 選方法 + 存/讀)

a. 獲取nsuserdefaults單例物件

b. 針對不同的資料型別,選擇方法,儲存

c. 針對不同的資料型別,選擇方法,讀取

使用nsuserdefaults存資料系統自動建立成plist檔案

適用場景

1. 不適用大資料量的儲存 (key)

原因: 記憶體中的資料存入磁碟 (io操作)

2. 少量的資料

樣例: 使用nsuserdefaults來儲存資料和讀取資料到沙盒中的檔案

1.獲取

nsuserdefaults

單例物件

nsuserdefaults*defaults = [nsuserdefaults

standarduserdefaults];

2.寫入資料 

//用單例物件選擇不同方法儲存資料(自動地建立乙個檔案;???)

[defaults setbool:yes

forkey:@"login"];

[defaults setinteger:1

forkey:@"count"];

nsarray *array = @[

@"maggie", @"jonny"

];[defaults setobject:array forkey:@"userarray"];

//.強制呼叫寫入的方法(不會馬上將資料寫入檔案中)

[defaults synchronize];//同步

3.讀取資料 

[defaults boolforkey:@"login"], 

[defaults integerforkey:@"count"], 

[defaults arrayforkey:@"userarray"]

4.使用單例物件移除資料(不會刪除檔案)

[defaults removeobjectforkey:

@"login"];

[defaults removeobjectforkey:

@"count"];

[defaultsremoveobjectforkey:@"userarray"];

二、plist檔案

首先手動建立乙個plist檔案

//1.獲取手動建立的plist檔案的路徑

nsstring

*l=[[

nsbundle

mainbundle

]bundlepath

];//應用沙盒路徑

nsstring

*plistpath = [[

nsbundle mainbundle] pathforresource:

@"student" oftype:

@"plist"];

//2.根據plist檔案root的type型別,使用不同的型別來接收資料(nsarray/nsdictionary)

nsarray *plistarray = [[nsarray

alloc] initwithcontentsoffile:plistpath];

//從plist檔案中讀取資料,確定plist檔案root的型別type

nsdictionary

*dic = [[

nsdictionary alloc] initwithcontentsoffile:

self

.testpath];

三、nskeyedarchiver(歸檔、解檔)

支援資料型別: 

1. 只要遵循了nscoding協議的類, 都可以使用歸檔方式存數資料

一般基本的資料型別都已經遵循的nscoding協議

2. 支援自定義的型別 person.h/.m: nsobject

歸檔archiving

歸檔archiving (寫)

歸檔(寫)步驟

1. 準備乙個可儲存資料的可變資料型別nsmutabledata

2. 建立乙個nskeyedarchiver物件

3. 對要儲存的資料進行編碼操作(二進位制格式)

4. 執行完成編碼操作

5. 將編碼後的資料寫入檔案

//需求:將兩個nsarray物件使用歸檔方式存到檔案

//準備兩個資料物件

nsarray

*firstarray =

@[@"jonny",

@19,

@[@"objective-c", @"ruby"]];

nsarray *secondarray = @[

@"bob", @"maggie"

]; //1.準備乙個可變的資料物件(空的)

nsmutabledata *data = [nsmutabledata data];

nslog(@"

編碼前的資料長度

:%lu", (unsigned

long)data.length);

//2.建立nskeyedarchiver物件

nskeyedarchiver

*archiver = [[

nskeyedarchiver alloc] initforwritingwithmutabledata:data];

//3.對資料進行編碼操作(二進位制)

[archiver encodeobject:firstarray forkey:@"firstuser"];

[archiver encodeobject:secondarray forkey:@"seconduser"];

//4.執行完成編碼

[archiver finishencoding];

nslog(@"

編碼後的資料長度

:%lu", (unsigned

long)data.length);

//5.將完成編碼的資料寫入檔案

if([data writetofile:

self

.archivingfilepath atomically:

yes]) {

nslog(@"

寫入成功

");解檔/反歸檔unarchiving (讀)

1. 從歸檔檔案中讀取二進位制資料

2. 建立乙個nskeyedunarchiver物件

3. 對資料進行解碼

4. 執行完成解碼操作

//需求:從寫入的檔案中讀取資料,驗證

//1.從檔案中讀取資料(二進位制nsdata)

nsdata

*data = [

nsdata datawithcontentsoffile:

self

.archivingfilepath];

//2.建立乙個nskeyedunarchiver物件

nskeyedunarchiver *unarchiver = [[nskeyedunarchiver alloc

]initforreadingwithdata

:data];

//3.對資料進行解碼操作(key)

nsarray *firstarray = [unarchiver decodeobjectforkey:@"firstuser"];

nsarray *secondarray = [unarchiver decodeobjectforkey:@"seconduser"];

//4.執行完成解碼操作

[unarchiver finishdecoding];

//列印驗證

nslog(@"firstarray:%@", firstarray);

nslog(@"secondarray:%@", secondarray);

資料持久化技術

主要實現登入與記住密碼功能 主要步驟如下 登入功能 1 login.xml step1 首先建立drawable資料夾,建立logintopbg roundcorner.xml step2 建立 btn select.xml 其中 btn shape.xml 檔案和 btn shape after....

資料持久化儲存技術

儲存在記憶體中的資料是處於瞬時狀態的,而儲存在儲存裝置中的資料是處於持久化狀態的 檔案儲存 特點 不對儲存的內容進行任何的格式化處理,所有資料都是原封不動的儲存到檔案中的。儲存型別 簡單的文字資料或二進位制資料 sharedpreferences儲存 特點 使用鍵值對的方式,sp儲存預設使用xml格...

資料持久化

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