NSUserDefaults

NSUserDefaults類提供了一個與默認系統(tǒng)進行交互的編程接口。NSUserDefaults對象是用來保存,恢復應用程序相關的偏好設置,配置數據等等。默認系統(tǒng)允許應用程序自定義它的行為去迎合用戶的喜好。你可以在程序運行的時候從用戶默認的數據庫中讀取程序的設置。

2 >NSUserDefaults使用細節(jié)

1.從NSUserDefaults返回的值是不可改變的,即便是你在存儲的時候使用的是可變的值。例如你使用mutableString做為“MyStringDefault”的值,當你再使用stringForKey:方法獲取的值,這個值仍然是不可變的。

2.NSUserDefaults是單例,通過類方法standardUserDefaults可以獲取NSUserDefaults單例,同時也是線程安全的。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];```
3.NSUserDefaults單例以`key-value`的形式存儲了一系列偏好設置,key是名稱,value是相應的數據。存/取數據時可以使用方法objectForKey:和setObject:forKey:來把對象存儲到相應的plist文件中,或者讀取,既然是plist文件,那么對象的類型則必須是plist文件可以存儲的類型,如下: 

NSData
NSString
NSNUmber
NSDate
NSArray
NSDictionary這些實例

如果你想存儲其他類型的對象,你要將其歸檔并創(chuàng)建一個NSData來實現(xiàn)存儲。

需要注意的是,即使對象是NSArray或NSDictionary,他們存儲的類型也應該是以上范圍包括的。```

3> 實例

#存儲基本數據
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];
//synchronize, 是為了避免了在每次讀取數據時候都打開用戶默認數據庫的操作??梢酝ㄟ^調用`synchronize`方法來使內存中的緩存與用戶默認系統(tǒng)進行同步。

#讀取基本數據
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *firstName = [defaults objectForKey:@"firstName"];
NSInteger age = [defaults integerForKey:@"Age"];

#讀取圖片數據
NSData *imageData = [defaults dataForKey:@"image"]; #先保存到NSData  
UIImage *image = [UIImage imageWithData:imageData];

4>直接指明類型存儲

- setBool:forKey:
- setFloat:forKey:
- setInteger:forKey:
- setDouble:forKey:
- setURL:forKey:

//方法-setInteger:,這跟常用的-setObject:相比設置類型更明確。

5> NSUserDefaults的 域

NSUserDefaults數據庫中其實是由多個層級的域組成的,當你讀取一個鍵值的數據時,NSUserDefaults從上到下透過域的層級尋找正確的值,不同的域有不同的功能,有些域是可持久的,有些域則不行。

* 應用域(application domain)是最重要的域,它存儲著你app通過NSUserDefaults set...forKey添加的設置。
* 注冊域(registration domain)僅有較低的優(yōu)先權,只有在應用域沒有找到值時才從注冊域去尋找。
* 全局域(global domain)則存儲著系統(tǒng)的設置
* 語言域(language-specific domains)則包括地區(qū)、日期等
* 參數域( argument domain)有最高優(yōu)先權
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 對于應用來說,每個用戶都有自己的獨特偏好設置,而好的應用會讓用戶根據喜好選擇合適的使用方式,把這些偏好記錄在應用包...
    肉肉要次肉閱讀 745評論 0 0
  • NSUserDefaults是什么,有什么用處 對于應用來說,每個用戶都有自己的獨特偏好設置,而好的應用會讓用戶根...
    heigo閱讀 182評論 0 0
  • 歡迎關注公眾號: CodeReview 關于NSUserDefaults首先要看蘋果官方的定義 NSUserDef...
    sellse閱讀 79,432評論 16 169
  • NSUserDefaults適合存儲輕量級的本地數據,比如要保存一個登陸界面的數據,用戶名、密碼之類的,個人覺得使...
    Clark_new閱讀 2,281評論 2 7
  • 我的用閱讀 297評論 0 0

友情鏈接更多精彩內容