国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

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

2020-07-26 03:16:53
字體:
來源:轉載
供稿:網友

前言

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桦川县| 冕宁县| 和静县| 哈尔滨市| 乐昌市| 长葛市| 陕西省| 清镇市| 马山县| 乐至县| 齐河县| 吉隆县| 都昌县| 河源市| 新化县| 龙州县| 修武县| 德保县| 屯门区| 吐鲁番市| 敖汉旗| 惠安县| 湖州市| 新野县| 温州市| 班戈县| 贵州省| 菏泽市| 嵩明县| 波密县| 赤城县| 凯里市| 大港区| 荆州市| 黄冈市| 安阳市| 榆树市| 澄城县| 昌江| 大化| 合肥市|