最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS用兩行代碼完美解決數(shù)據(jù)持久化

 更新時間:2016年08月09日 10:51:53   作者:王韓峰  
所謂的持久化,就是將數(shù)據(jù)保存到硬盤中,使得在應(yīng)用程序或機(jī)器重啟后可以繼續(xù)訪問之前保存的數(shù)據(jù)。在iOS開發(fā)中,有很多數(shù)據(jù)持久化的方案,接下來我將嘗試著介紹一種巧妙的方法,用兩行代碼解決這個問題,一起來學(xué)習(xí)下。

前言

在實(shí)際的iOS開發(fā)中,有些時候涉及到將程序的狀態(tài)保存下來,以便下一次恢復(fù),或者是記錄用戶的一些喜好和用戶的登錄信息等等。 這就需要涉及到數(shù)據(jù)的持久化了,所謂數(shù)據(jù)持久化就是數(shù)據(jù)的本地保存,將數(shù)據(jù)從內(nèi)存中遷入到存儲器上。網(wǎng)上有很多種數(shù)據(jù)持久化的方法,如實(shí)現(xiàn)自己實(shí)現(xiàn)I/O、數(shù)據(jù)庫、云或則走第三方接口等等。但是有時候可能只是進(jìn)行一些簡單的數(shù)據(jù)存儲,如用戶的偏好設(shè)置、用戶的sessionID等等,這時候使用上述方法便顯得有點(diǎn)興師動眾了,現(xiàn)在需要一種更加輕量化的操作方式。

一、認(rèn)識 NSUserDefaults

為了尋求上述問題的解決方案,查閱apple官方文檔發(fā)現(xiàn),有一個類NSUserDefaults是蘋果設(shè)計專門用來解決這個問題的:

 NSUserDefaults is a hierarchical persistent interprocess
 (optionally distributed) key-value store, optimized for storing user settings.

翻譯大致如下:

NSUserDefaults 是一種進(jìn)程間(任意分布)的分層級持久化鍵-值存儲,為存儲用戶設(shè)置而優(yōu)化。

詳細(xì)說明可以查閱官方文檔,這里只介紹其使用。

現(xiàn)在,我們已經(jīng)找到了一種輕量級的數(shù)據(jù)持久化解決方案了,為什么說它輕量級呢。因為apple官方設(shè)計它的目的就是為了解決用戶設(shè)置的存儲問題,下面就來介紹它的使用。

二、使用 NSUserDefaults

由于NSUserDefaults是一種進(jìn)程間的解決方案,所以我們可以在任意一個進(jìn)程中調(diào)用它來訪問和存儲用戶的信息。
舉個例子:我們要對用戶的用戶名進(jìn)行數(shù)據(jù)的持久化操作

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:@"whf" forKey:@"name"];

通過上面這兩行代碼,我們就已經(jīng)將用戶的姓名通過鍵值對的方式存儲到本地了。不需要指定數(shù)據(jù)的存儲位置,一切由系統(tǒng)搞定,我們只需要告訴系統(tǒng)我們要存什么。如果多次存儲的是同一個鍵的值,那么這個鍵的值是根據(jù)最后一次的值定的,也就是說系統(tǒng)是覆蓋寫,而不是追加寫最后返回的是數(shù)組。

接下來演示取數(shù)據(jù)的過程:在任意線程中,我們調(diào)用

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *userName = [userDefaults objectForKey:@"name"];

這兩句就可以從存儲器上獲得我們要的數(shù)據(jù)了,如果數(shù)據(jù)不存在,那么返回的對象就是nil。

三、底層實(shí)現(xiàn)機(jī)制

通過NSUserDefaults的使用,發(fā)現(xiàn)程序重新運(yùn)行數(shù)據(jù)依舊存在,那么這個數(shù)據(jù)肯定是被存儲在了手機(jī)的存儲器上?,F(xiàn)在來探尋它的實(shí)現(xiàn)機(jī)制:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
 [userDefaults setObject:@"123" forKey:@"name"];
 NSString *userName = [userDefaults objectForKey:@"name"];

 NSLog(@"%@",userName);
 NSString *homeDirectory = NSHomeDirectory();
 NSLog(@"homeDire --------%@",homeDirectory);

運(yùn)行結(jié)果:

根據(jù)路徑進(jìn)入沙盒發(fā)現(xiàn),在沙盒的Library/Preferences/目錄下發(fā)現(xiàn)多出了一個com.itripbuyer.Date-Persistence.plist的plist文件。

打開后發(fā)現(xiàn)里面有一個鍵值對,并且就是我們剛剛操作的數(shù)據(jù)。于是我猜測,通過我們剛才的兩行代碼,系統(tǒng)將我們的數(shù)據(jù)轉(zhuǎn)換成了一個plist文件,這個文件中裝載的是一些鍵值對。

四、靈活巧用

NSUserDefaults 官方給出的用途是存儲用戶的Setting,但是通過上述操作發(fā)現(xiàn),程序中凡是涉及到鍵值對的存儲,都可以使用NSUserDefaults來實(shí)現(xiàn),即使不是鍵值對的形式,轉(zhuǎn)換成鍵值對也要用NSUserDefaults來實(shí)現(xiàn),這樣既省時又省力,還能用最簡潔的代碼換來最穩(wěn)定的數(shù)據(jù)持久化操作。

以上就是iOS用兩行代碼完美解決數(shù)據(jù)持久化的全部內(nèi)容,希望本文對大家開發(fā)IOS的時候有所幫助。

相關(guān)文章

最新評論

绩溪县| 安庆市| 平塘县| 三河市| 周至县| 绩溪县| 古田县| 宣恩县| 洛南县| 叶城县| 藁城市| 密云县| 秦皇岛市| 井冈山市| 永泰县| 承德市| 都兰县| 宾川县| 南雄市| 阜宁县| 建平县| 台州市| 嫩江县| 汾西县| 汨罗市| 分宜县| 巴林左旗| 开远市| 三台县| 平顶山市| 盱眙县| 抚顺市| 松潘县| 莱阳市| 教育| 会东县| 阿合奇县| 乃东县| 清苑县| 大埔县| 灵寿县|