關於NSUserDefaults的祕密
NSUserDefaults 簡介
在日常開發中經常遇到本地儲存,儲存的方式有很多,今天我們就來看看NSUserDefaults,NSUserDefaults是一個輕量級的本地化儲存的一個類。可以用它來儲存一些偏好設定,其儲存路徑為Library/Preferences。注意這個儲存並沒有加密,so。
NSUserDefaults常用的方法
NSUserDefaults常用的方法,使用和NSMutableDictionary的一些方法類似。如下,看不懂的請自行百度
呼叫set的方法後,如果需要馬上同步需要synchronize方法。注意這個方法不要太頻繁呼叫。如果不呼叫synchronize,系統會每個一個時間段自動儲存。
NSUserDefaults高階用法
儲存自定義物件
NSUserDefaults只支援基本資料型別,如果需要儲存自定義的物件,就需要藉助NSKeyedArchiver將物件歸檔成NSData,然後再用[useDefault setObject: forKey:];方法儲存
2.資料共享
app group 中的資料共享,至於怎麼新建group,參考https://onevcat.com/2014/08/notification-today-widget/,基本的思路如下
這裡就能解釋,同一個公司的app,裝了一個之後,在裝另一個,就會自動登入的功能。initWithSuiteName會在Library/Preference下新建一個以name為名字的plist檔案。[NSUserDefaults standardUserDefaults]是以bundle id為名字的一個plist檔案。利用這個我們可以給每一個使用者新建一個偏好設定的檔案,儲存皮膚,字型等,不同的使用者登入就會有不同的效果。
NSUserDefaults資料清除
- (void)removePersistentDomainForName:(NSString *)domainName;清除domain下的所有資訊。在這裡要說一下NSUserDefaults的域,預設包含5個domain,分別是NSArgumentDomain,Application,NSGlobalDomain,Languages,NSRegistrationDomain。
NSUserDefaults注意的地方
當我們獲取偏好設定的值的時候,需要注意,比如如下:[stand boolForKey:@"key1"];如果沒有對應的key1則獲取的值為預設值false。這種情況就有可能和有對應的key,並且對應的值為false時,區分不開,造成的邏輯錯誤。類似的還有[stand integerForKey:@""]等。
對應的解決辦法是:
相關文章
- 關於二進位制世界的祕密
- 關於手機裡的IP地址,你不得不知道的“祕密”
- Eventloop的祕密OOP
- 關於密碼密碼
- 網頁文字的祕密網頁
- ZooKeeper 會話的祕密會話
- 隱藏在水印的祕密
- 隨機森林的祕密隨機森林
- 關於國密HTTPS 的那些事(二)HTTP
- Redis小祕密Redis
- 揭示檢查點的祕密
- “==”、“equals()”、“hashcode()”之間的祕密
- 挖掘Chrome Console的小祕密Chrome
- TCP/IP家族的小祕密TCP
- 《流量的祕密》閱讀分析
- 使用 NSUserDefaults 儲存字典的一個坑
- WebGL座標系的小祕密Web
- JavaScript原型與繼承的祕密JavaScript原型繼承
- Flutter和原生之間的祕密Flutter
- 《親密關係》第三章_吸引力的祕訣?-2
- 關於區塊鏈密碼學區塊鏈密碼學
- 關於mysql忘記密碼的解決策略MySql密碼
- 關於WiFi密碼破解的一些心得WiFi密碼
- Python變數小祕密Python變數
- JS祕密花園摘要JS
- 抖音的小遊戲大祕密遊戲
- Brightback:留住客戶的6個祕密
- Mac Idea你不知道的祕密MacIdea
- 谷歌雲端計算的祕密武器谷歌
- Bitmap ImageView大小的一些祕密View
- JS 中賦值語句的祕密JS賦值
- 同態加密實現資料隱私計算,能讓你的小祕密更加祕密加密
- 關於原始碼防洩密的本質問題原始碼
- 關於《密碼法》,你想知道的都在這裡密碼
- 揭祕JavaScript中“神祕”的this關鍵字JavaScript
- 獅子山首次祕密進行基於區塊鏈的總統選舉區塊鏈
- 流量的生意——國產遊戲成功的祕密遊戲
- 移動端快速開發的祕密武器