欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

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

通過NSUserDefaults的使用,發(fā)現(xiàn)程序重新運(yùn)行數(shù)據(jù)依舊存在,那么這個數(shù)據(jù)肯定是被存儲在了手機(jī)的存儲器上?,F(xiàn)在來探尋它的實現(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來實現(xiàn),即使不是鍵值對的形式,轉(zhuǎn)換成鍵值對也要用NSUserDefaults來實現(xiàn),這樣既省時又省力,還能用最簡潔的代碼換來最穩(wěn)定的數(shù)據(jù)持久化操作。

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

相關(guān)文章

  • 淺談iOS 數(shù)據(jù)結(jié)構(gòu)之鏈表

    淺談iOS 數(shù)據(jù)結(jié)構(gòu)之鏈表

    這篇文章主要介紹了淺談iOS 數(shù)據(jù)結(jié)構(gòu)之鏈表,本文詳細(xì)的介紹了單鏈表和雙鏈表,具有一定的參考價值,有興趣的可以了解一下
    2017-09-09
  • iOS實現(xiàn)相冊和網(wǎng)絡(luò)圖片的存取

    iOS實現(xiàn)相冊和網(wǎng)絡(luò)圖片的存取

    本篇文章主要介紹了iOS實現(xiàn)相冊和網(wǎng)絡(luò)圖片的存取,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • iOS中圖片的解壓縮到渲染過程詳解

    iOS中圖片的解壓縮到渲染過程詳解

    這篇文章主要給大家介紹了關(guān)于iOS中圖片的解壓縮到渲染過程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 詳解在iOS App中自定義和隱藏狀態(tài)欄的方法

    詳解在iOS App中自定義和隱藏狀態(tài)欄的方法

    這篇文章主要介紹了在iOS App中自定義和隱藏狀態(tài)欄的方法,在頂部時某些狀況下即用應(yīng)用內(nèi)的狀態(tài)欄覆蓋系統(tǒng)本身的,代碼示例為Objective-C語言,需要的朋友可以參考下
    2016-03-03
  • iOS判斷是否越獄設(shè)備方法示例

    iOS判斷是否越獄設(shè)備方法示例

    這篇文章主要給大家介紹了關(guān)于iOS判斷是否越獄設(shè)備的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • iOS開發(fā)之銀行卡號識別

    iOS開發(fā)之銀行卡號識別

    本文給大家分享ios開發(fā)之銀行卡號識別功能,思路明確,需要的朋友參考下吧
    2016-12-12
  • IOS CocoaPods詳解之制作篇

    IOS CocoaPods詳解之制作篇

    學(xué)會使用別人的Pods依賴庫以后,你一定對創(chuàng)建自己的依賴庫躍躍欲試,今天就來揭開Pods依賴庫創(chuàng)建過程的神秘面紗
    2016-09-09
  • iOS中的導(dǎo)航欄UINavigationBar與工具欄UIToolBar要點解析

    iOS中的導(dǎo)航欄UINavigationBar與工具欄UIToolBar要點解析

    UINavigation可以附著于導(dǎo)航控制器之中使用,也可以在controller中單獨(dú)使用,這里我們將來看iOS中的導(dǎo)航欄UINavigationBar與工具欄UIToolBar要點解析.
    2016-06-06
  • IOS圖片的原生(Graphics)詳解及實例

    IOS圖片的原生(Graphics)詳解及實例

    這篇文章主要介紹了IOS圖片的原生(Graphics)詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • iOS開發(fā)中使用UIWebView 屏蔽 alert警告框

    iOS開發(fā)中使用UIWebView 屏蔽 alert警告框

    這篇文章主要介紹了iOS開發(fā)中使用UIWebView 屏蔽 alert警告框的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11

最新評論