iOS用兩行代碼完美解決資料持久化_IOS

來源:互聯網
上載者:User

前言

在實際的iOS開發中,有些時候涉及到將程式的狀態儲存下來,以便下一次恢複,或者是記錄使用者的一些喜好和使用者的登入資訊等等。 這就需要涉及到資料的持久化了,所謂資料持久化就是資料的本地儲存,將資料從記憶體中遷入到儲存空間上。網上有很多種資料持久化的方法,如實現自己實現I/O、資料庫、雲或則走第三方介面等等。但是有時候可能只是進行一些簡單的資料存放區,如使用者的喜好設定、使用者的sessionID等等,這時候使用上述方法便顯得有點興師動眾了,現在需要一種更加輕量化的操作方式。

一、認識 NSUserDefaults

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

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

翻譯大致如下:

NSUserDefaults 是一種進程間(任意分布)的分層級持久化鍵-值儲存,為儲存使用者佈建而最佳化。

詳細說明可以查閱官方文檔,這裡只介紹其使用。

現在,我們已經找到了一種輕量級的資料持久化解決方案了,為什麼說它輕量級呢。因為apple官方設計它的目的就是為瞭解決使用者佈建的儲存問題,下面就來介紹它的使用。

二、使用 NSUserDefaults

由於NSUserDefaults是一種進程間的解決方案,所以我們可以在任意一個進程中調用它來訪問和儲存使用者的資訊。
舉個例子:我們要對使用者的使用者名稱進行資料的持久化操作

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

通過上面這兩行代碼,我們就已經將使用者的姓名通過索引值對的方式儲存到本地了。不需要指定資料的儲存位置,一切由系統搞定,我們只需要告訴系統我們要存什麼。如果多次儲存的是同一個鍵的值,那麼這個鍵的值是根據最後一次的值定的,也就是說系統是覆蓋寫,而不是追加寫最後返回的是數組。

接下來示範取資料的過程:在任意線程中,我們調用

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

這兩句就可以從儲存空間上獲得我們要的資料了,如果資料不存在,那麼返回的對象就是nil。

三、底層實現機制

通過NSUserDefaults的使用,發現程式重新運行資料依舊存在,那麼這個資料肯定是被儲存在了手機的儲存空間上。現在來探尋它的實現機制:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults setObject:@"123" forKey:@"name"]; NSString *userName = [userDefaults objectForKey:@"name"]; NSLog(@"%@",userName); NSString *homeDirectory = NSHomeDirectory(); NSLog(@"homeDire --------%@",homeDirectory);

運行結果:

根據路徑進入沙箱發現,在沙箱的Library/Preferences/目錄下發現多出了一個com.itripbuyer.Date-Persistence.plist的plist檔案。

開啟後發現裡面有一個索引值對,並且就是我們剛剛操作的資料。於是我猜測,通過我們剛才的兩行代碼,系統將我們的資料轉換成了一個plist檔案,這個檔案中裝載的是一些索引值對。

四、靈活巧用

NSUserDefaults 官方給出的用途是儲存使用者的Setting,但是通過上述操作發現,程式中凡是涉及到索引值對的儲存,都可以使用NSUserDefaults來實現,即使不是索引值對的形式,轉換成索引值對也要用NSUserDefaults來實現,這樣既省時又省力,還能用最簡潔的代碼換來最穩定的資料持久化操作。

以上就是iOS用兩行代碼完美解決資料持久化的全部內容,希望本文對大家開發IOS的時候有所協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.