你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS用兩行代碼完美解決數據持久化

iOS用兩行代碼完美解決數據持久化

編輯:IOS開發綜合

前言

在實際的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的時候有所幫助。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved