資料持久化技術
持久化(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只是物件模型到關係模型之間轉換的不同實現。只不過物件模型和關係模型應用廣泛,所以就會誤認為資料...