nsuserdefaults是什麼,有什麼用處
對於應用來說,每個使用者都有自己的獨特偏好設定,而好的應用會讓使用者根據喜好選擇合適的使用方式,把這些偏好記錄在應用包的plist
檔案中,通過nsuserdefaults
類來訪問,這是nsuserdefaults
的常用姿勢。如果有一些設定你希望使用者即使公升級後還可以繼續使用,比如玩遊戲時得過的最高分、喜好和通知設定、主題顏色甚至乙個使用者頭像,那麼你可以使用nsuserdefaults
來儲存這些資訊,如果有更多需求,可以了解資料持久化
相關的知識。
具體來說nsuserdefaults
是ios系統提供的乙個單例類(ios提供了若干個單例類),通過類方法standarduserdefaults
可以獲取nsuserdefaults
單例。如:
nsuserdefaults *defaults = [nsuserdefaults standarduserdefaults];
nsuserdefaults
單例以key-value
的形式儲存了一系列偏好設定,key
是名稱,value
是相應的資料。存/取資料時可以使用方法objectforkey:
和setobject:forkey:
來把物件儲存到相應的plist
檔案中,或者讀取,既然是plist
檔案,那麼物件的型別則必須是plist
檔案可以儲存的型別,正如官方文件中提到的——
而如果需要儲存plist
檔案不支援的型別,比如,可以先將其歸檔為nsdata
型別,再存入plist
檔案,需要注意的是,即使物件是nsarray
或nsdictionary
,他們儲存的型別也應該是以上範圍包括的。
存/讀不同型別資料
比如存/讀乙個整數、字串和一張:
###存
nsuserdefaults *defaults = [nsuserdefaults standarduserdefaults];
[defaults setobject:@」jack「 forkey:@"firstname"];
[defaults setinteger:10 forkey:@"age"];
uiimage *image =[uiimage imagenamed:@"somename"];
nsdata *imagedata = uiimagejpegrepresentation(image, 100);//把image歸檔為nsdata
[defaults setobject:imagedata forkey:@"image"];
[defaults synchronize];
其中,方法synchronise
是為了強制儲存,其實並非必要,因為這個方法會在系統中預設呼叫,但是你確認需要馬上就儲存,這樣做是可行的。
###讀
nsuserdefaults *defaults = [nsuserdefaults standarduserdefaults];
nsstring *firstname = [defaults objectforkey:@"firstname"]
nsinteger age = [defaults integerforkey:@"age"];
nsdata *imagedata = [defaults dataforkey:@"image"];
uiimage *image = [uiimage imagewithdata:imagedata];
我們通過為三個資料設定key
的方式把nsinteger
、nsstring
和uiimage
三種資料儲存下來,其中是通過歸檔為nsdata
的方式進行儲存的,除此之外,還可以被轉為nsnumber
或nsstring
型別。順便提一句,這裡nsinteger
沒有星號,因為nsinteger
根據系統是64位還是32位來判斷自身是long
還是int
型別,並且它也不是乙個標準objective-c物件。
簡便方法訪問不同型別資料
由上邊的例子可以看到乙個方法-setinteger:
,這跟常用的-setobject:
相比設定型別更明確。其實,nsuserdefaults
提供了若干簡便方法可以儲存某些常用型別的值,例如:
- setbool:forkey:
- setfloat:forkey:
- setinteger:forkey:
- setdouble:forkey:
- seturl:forkey:
這將使某些值的設定更簡單。
nsuserdefaults域
考慮這麼一種情況:
bool showtutorialonlaunch = [[nsuserdefaults standarduserdefaults] boolforkey:@"showtutorial"];
nsurl *defaultprefsfile = [[nsbundle mainbundle]
urlforresource:@"defaultpreferences" withextension:@"plist"];
nsdictionary *defaultprefs = [nsdictionary dictionarywithcontentsofurl:defaultprefsfile];
[[nsuserdefaults standarduserdefaults] registerdefaults:defaultprefs];
域
user defaults資料庫中其實是由多個層級的域組成的,當你讀取乙個鍵值的資料時,nsuserdefaults
從上到下透過域的層級尋找正確的值,不同的域有不同的功能,有些域是可持久的,有些域則不行。
註冊域(registration domain)僅有較低的優先權,只有在應用域沒有找到值時才從註冊域去尋找。
全域性域(global domain)則儲存著系統的設定
語言域(language-specific domains)則包括地區、日期等
引數域( argument domain)有最高優先權
storing data with nsuserdefaultsios sdk: working with nsuserdefaults
handling default values with nsuserdefaults
優秀工程師 KVC KVO
kvc 與 kvo 是 objective c 的關鍵概念,個人認為必須理解的東西,下面是例項講解。乙個物件擁有某些屬性。比如說,乙個 person 物件有乙個 name 和乙個 address 屬性。以 kvc 說法,person 物件分別有乙個 value 對應他的 name 和 address...
優秀工程師的素質
1.責任感 責任感是一種自覺主動履行分內分外一切有益事情的精神狀態。責任感作為心理學概念,屬於社會道德心理的範疇,是思想道德素質的重要內容。也是工程職業道德的基礎。2.人際交往能力 工程上的成功必定是團隊努力的結果。成功的工程師往往具有良好的人際交往能力。他們不僅需要和受教育程度高的工程師同行以及其...
優秀工程師應該具備哪些素質 優秀工程師的必備素質上
什麼是工程師?工程師是為解決問題而生的。應用工程技術科學和其他有關科學知識,解決工程技術中的各類具體問題。現代科技發展迅猛,使現代工程和工業生產出現了自動化 智慧型化 資訊化 動態化等許多新的特點。為了適應這些情況變化,工程師必須不斷提高自己的主觀在內素養,培養全面的技術能力和社會工作能力,建立合理...