談談大家熟悉的NSUserDefault

對于NSUserDefault,做過iOS開發(fā)的人肯定不會陌生,它就是持久化數(shù)據(jù)的一種方式,主打輕量級的用戶配置信息。下面主要從三個方面來講講NSUserDefault:

1、基礎概念及用法

它是單例的,并且是線程安全的,是以鍵值對的形式保存在沙盒中,最下面還是用plist文件進行保存。支持存儲的數(shù)據(jù)類型是id,NSObject(自定義對象),NSString,NSNumber,NSArray,NSDictionary,NSData。

在進行自定義對象的歸檔時需要實現(xiàn)NSCoding協(xié)議,不實現(xiàn)協(xié)議方法則拋出異常,類似于序列化與反序列話,獲得的對象都是不一致的。在Java中可以做到對象的一致性,有serializableUID的概念,在iOS不知如何做到,知道的可以告知。

對其他幾類對象,無論是可變類型還是不可變類型,最終取出來的數(shù)據(jù)都是不可變的。

雖然在提供的API中有

API方法1

這幾個方法,但是系統(tǒng)在后臺保存數(shù)據(jù)的數(shù)據(jù)都轉(zhuǎn)化為NSNumber對象,對于取數(shù)據(jù)也有對應的方法

API方法2

系統(tǒng)在后臺也做了處理,如果直接用objectForKey:取出的內(nèi)容是NSNumber類型,需要進一步轉(zhuǎn)換。

2、是如何進行數(shù)據(jù)保存的

用它進行數(shù)據(jù)保存時,如果你設置或刪除了值,如果沒有手動調(diào)用synchronize方法則有可能取不到剛設置或刪除的值,在項目開發(fā)過程中遇到這種現(xiàn)象比較普遍。而系統(tǒng)的做法也是定時的調(diào)用此方法。

3、域的概念以及其用法

在NSUserDefault中存在域的概念,包含5個部分NSArgumentDomain,Application,NSGlobalDomain,Languages,NSRegistrationDomain。

NSArgumentDomain:代表的是命令行參數(shù),可以在Edit Scheme->Arguments->Arguments Passed On Launch中添加,格式是-key value。

Application:應用程序域,設置的方法默認數(shù)據(jù)保存是在這里

NSGlobalDomain:全局域,所有應用程序都將公用該域

Languages:國際化語言版本域

NSRegistrationDomain:臨時域,- (void)registerDefaults:(NSDictionary*)registrationDictionary方法被調(diào)用是數(shù)據(jù)是保存在這里。

在讀取數(shù)據(jù)時,都會在底層的存儲結(jié)構(gòu)中進行一次搜索,搜索的順序是這樣:

NSArgumentDomain->Application->NSGlobalDomain->Languages->NSRegistrationDomain

寫了個測試:

測試截圖1
測試截圖2

這5是哪里輸出來的呢?我是在NSArgumentDomain中設置了

測試截圖3

知道了NSUserDefault讀取數(shù)據(jù)的搜索順序,就可以做一些實際運用。比如要測試國際化的版本,因NSArgumentDomain比Languages更先搜索到,所以可以設置-AppleLanguages (zh-Hans),就不用頻繁的切換模擬器的語言版本來測試國際化了。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 關于首選項和設置 首選項是您持久存儲的信息,并用于配置您的應用程序。應用程序通常會向用戶公開偏好設置,以便他們自定...
    nicedayCoco閱讀 1,154評論 0 0
  • 1,NSObject中description屬性的意義,它可以重寫嗎?答案:每當 NSLog(@"")函數(shù)中出現(xiàn) ...
    eightzg閱讀 4,331評論 2 19
  • 一、深復制和淺復制的區(qū)別? 1、淺復制:只是復制了指向?qū)ο蟮闹羔槪磧蓚€指針指向同一塊內(nèi)存單元!而不復制指向?qū)ο蟮?..
    iOS_Alex閱讀 1,527評論 1 27
  • 夜,踏上公交,隨座而坐。點點燈光綴亮前方的路,思緒正要隨車前飄。身前傾了一下,下一站到了。不經(jīng)意向玻璃外望去...
    皮氵閱讀 407評論 0 1
  • 夜讀李白 范國強 紅袖添香,夜讀李白,對讀書人來說是一種絕妙的意境。此時對我來說,雖無添香紅袖,李白卻仍然還是頗耐...
    仁者愛山閱讀 1,053評論 6 8

友情鏈接更多精彩內(nèi)容