iOS開發(fā)-數(shù)據(jù)持久化(數(shù)據(jù)本地化)

首先我們拋出來兩個問題:1.什么是數(shù)據(jù)持久化數(shù)?2.據(jù)持久化都有哪些方法?接下來我們順著思路,來解決這兩個問題。

1.什么是數(shù)據(jù)持久化

從字面意思上理解,我們便知道,數(shù)據(jù)持久化是實現(xiàn)我們數(shù)據(jù)的長久儲存,以便于我們在請求數(shù)據(jù)的時候能夠更快速,更節(jié)省流量。從技術(shù)層面說,數(shù)據(jù)持久化就是將內(nèi)存中的數(shù)據(jù)模型轉(zhuǎn)換為存儲模型,以及將存儲模型轉(zhuǎn)換為內(nèi)存中的數(shù)據(jù)模型的統(tǒng)稱. 數(shù)據(jù)模型可以是任何數(shù)據(jù)結(jié)構(gòu)或?qū)ο竽P?存儲模型可以是關(guān)系模型、XML、二進(jìn)制流等。

換種說法:數(shù)據(jù)持久化就是將輸入或網(wǎng)絡(luò)請求的數(shù)據(jù)按照一定的方式存儲在本地磁盤,并在需要時將磁盤中的數(shù)據(jù)按照特定方式取出顯示在視圖上的,可以將數(shù)據(jù)長期(永久)保存持有的行為。

2.數(shù)據(jù)持久化方法

實現(xiàn)數(shù)據(jù)持久化的方法各種各樣,我們下面總結(jié)和舉出幾種常用和基礎(chǔ)的數(shù)據(jù)持久化方式。

2.1、通過oc語言方式存儲

存入:

首先,獲取library路徑,

其次,通過單例NSFileManager文件管理器創(chuàng)建文件并返回文件(數(shù)據(jù)所存入文件)路徑

最后,通過writeToFile(例)方法將內(nèi)容寫入文件

取出:

首先,獲取內(nèi)容文件所在路徑

然后,根據(jù)路徑獲取文件內(nèi)容,并將內(nèi)容顯示(更新UI)

2.2、通過plist文件方式存儲

存入:

首先,獲取bundle路徑,并在其中通過單例NSFileManager文件管理器創(chuàng)建plist文件,返回文件路徑

其次,將數(shù)據(jù)放入字典或數(shù)組中通過writeToFile:(例)方法存入文件

取出:

首先,獲取內(nèi)容文件所在路徑

然后,根據(jù)路徑獲取文件內(nèi)容,并將內(nèi)容顯示(更新UI)

2.3、通過UserDefault方式存儲

NSUserDefaults是單例,同時也是線程安全的。

常用在鍵值存儲

NSUserDefaults類提供了一個與默認(rèn)系統(tǒng)進(jìn)行交互的編程接口。NSUserDefaults對象是用來保存,恢復(fù)應(yīng)用程序相關(guān)的偏好設(shè)置,配置數(shù)據(jù)等等。默認(rèn)系統(tǒng)允許應(yīng)用程序自定義它的行為去迎合用戶的喜好。你可以在程序運(yùn)行的時候從用戶默認(rèn)的數(shù)據(jù)庫中讀取程序的設(shè)置。同時NSUserDefaults的緩存避免了在每次讀取數(shù)據(jù)時候都打開用戶默認(rèn)數(shù)據(jù)庫的操作。可以通過調(diào)用synchronize方法來使內(nèi)存中的緩存與用戶默認(rèn)系統(tǒng)進(jìn)行同步。

NSUserDefaults支持的數(shù)據(jù)類型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL

存入:

獲取NSUserDefaults單例對象,通過setObjiect: forKey:(例)方法存入文件,并通過synchronize方法實現(xiàn)數(shù)據(jù)同步

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:name forKey:@"kName"]; [defaults setBool:isOpen forKey:@"kIsOpen"];

return [defaults synchronize];//同步數(shù)據(jù)

取出:

同樣獲取單例對象,通過objectForKey:方法獲取存儲內(nèi)容,并更新UI

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *name = [defaults objectForKey:@"kName"]; BOOL isOpen = [defaults boolForKey:@"kIsOpen"];

2.4、歸檔解檔

一般用在自定義對象

前提,可創(chuàng)建模型并在模型中實現(xiàn)歸檔方法(將對象通過編碼為二進(jìn)制,NSCoder例方法:encodeObject:forKey:)和解檔方法(將二進(jìn)制文件通過編碼成為數(shù)據(jù)對象,例方法:decodeObjectForKey:)

存入:(歸檔)

獲取bundle路徑,并在bundle中使用單例NSFileManager文件管理器創(chuàng)建存儲文件并返回路徑 然后,NSKeyedArchiver類利用帶鍵的文件來歸檔,類方法archiveRootObject:toFile:

取出:(解檔)

同樣先獲取文件路徑,然后用NSKeyedUnarchiver類類方法(unarchiveObjectWithFile:)將數(shù)據(jù)取出,并更新UI

2.5、c語言SQLite3和FMDB

都采用單例方式,把行為進(jìn)行封裝

都是在單例的初始化的時候創(chuàng)建數(shù)據(jù)庫對象,并且只執(zhí)行一次創(chuàng)建

創(chuàng)建時,首先獲取文件路徑,再通過SQL語句創(chuàng)建數(shù)據(jù)庫

在c語言中,一個完整的行為分為

1.打開數(shù)據(jù)庫 sqlite3_open

2.編寫sql語句

3.創(chuàng)建預(yù)編譯對象(如果有參數(shù),需要先綁定參數(shù),例:插入,查詢(部分),刪除,更新) sqlite3_stmt *stmt(預(yù)編譯對象)sqlite3_bind_text(綁定參數(shù))

4.執(zhí)行預(yù)編譯對象 sqlite3_step(stmt);

5.銷毀預(yù)編譯對象 sqlite3_finalize(stmt);

6.關(guān)閉數(shù)據(jù)庫 sqlite3_close(db)

FMDB對c語言中的數(shù)據(jù)庫操作行為,所以操作更為簡單和更易理解

常用在增刪改查

FMDatabase 數(shù)據(jù)庫對象類 用于執(zhí)行SQL語句

FMRrsultSet 結(jié)果集合類 用于接受數(shù)據(jù)庫隊列執(zhí)行后返回結(jié)果

FMDatabaseQueue 數(shù)據(jù)隊列類 在多線程中更新的話需要用到該類

1.打開數(shù)據(jù)庫 [db open];

2.編寫sql語句

3.執(zhí)行sql(數(shù)據(jù)庫對象(FMDateBase實例)執(zhí)行sql語句)

[db executeUpdate:sql];[(FMRrsultSet 實例) next]遍歷

4.關(guān)閉數(shù)據(jù)庫 [db close];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內(nèi)容