談談大家熟悉的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ù)都轉化為NSNumber對象,對于取數(shù)據(jù)也有對應的方法

API方法2

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

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

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

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方法被調用是數(shù)據(jù)是保存在這里税娜。

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

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

寫了個測試:

測試截圖1
測試截圖2

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

測試截圖3

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末涧卵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子腹尖,更是在濱河造成了極大的恐慌艺演,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桐臊,死亡現(xiàn)場離奇詭異胎撤,居然都是意外死亡,警方通過查閱死者的電腦和手機断凶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門伤提,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人认烁,你說我怎么就攤上這事肿男〗樾冢” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵舶沛,是天一觀的道長嘹承。 經(jīng)常有香客問我,道長如庭,這世上最難降的妖魔是什么叹卷? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮坪它,結果婚禮上骤竹,老公的妹妹穿的比我還像新娘。我一直安慰自己往毡,他們只是感情好蒙揣,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著开瞭,像睡著了一般懒震。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嗤详,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天挎狸,我揣著相機與錄音,去河邊找鬼断楷。 笑死,一個胖子當著我的面吹牛崭别,可吹牛的內容都是我干的冬筒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼茅主,長吁一口氣:“原來是場噩夢啊……” “哼舞痰!你這毒婦竟也來了?” 一聲冷哼從身側響起诀姚,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤响牛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赫段,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呀打,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年糯笙,在試婚紗的時候發(fā)現(xiàn)自己被綠了贬丛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡给涕,死狀恐怖豺憔,靈堂內的尸體忽然破棺而出额获,到底是詐尸還是另有隱情,我是刑警寧澤恭应,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布抄邀,位于F島的核電站,受9級特大地震影響昼榛,放射性物質發(fā)生泄漏境肾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一褒纲、第九天 我趴在偏房一處隱蔽的房頂上張望准夷。 院中可真熱鬧,春花似錦莺掠、人聲如沸衫嵌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽楔绞。三九已至,卻和暖如春唇兑,著一層夾襖步出監(jiān)牢的瞬間酒朵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工扎附, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蔫耽,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓留夜,卻偏偏與公主長得像匙铡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子碍粥,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容

  • 關于首選項和設置 首選項是您持久存儲的信息鳖眼,并用于配置您的應用程序。應用程序通常會向用戶公開偏好設置嚼摩,以便他們自定...
    nicedayCoco閱讀 996評論 0 0
  • 1钦讳,NSObject中description屬性的意義,它可以重寫嗎?答案:每當 NSLog(@"")函數(shù)中出現(xiàn) ...
    eightzg閱讀 4,143評論 2 19
  • 一枕面、深復制和淺復制的區(qū)別愿卒? 1、淺復制:只是復制了指向對象的指針潮秘,即兩個指針指向同一塊內存單元掘猿!而不復制指向對象的...
    iOS_Alex閱讀 1,374評論 1 27
  • 夜,踏上公交唇跨,隨座而坐稠通。點點燈光綴亮前方的路衬衬,思緒正要隨車前飄。身前傾了一下改橘,下一站到了滋尉。不經(jīng)意向玻璃外望去...
    皮氵閱讀 357評論 0 1
  • 夜讀李白 范國強 紅袖添香,夜讀李白飞主,對讀書人來說是一種絕妙的意境狮惜。此時對我來說,雖無添香紅袖碌识,李白卻仍然還是頗耐...
    仁者愛山閱讀 972評論 6 8