NSUserDefaults簡介及使用


NSUserDefaults類提供了一個與默認系統進行交互的編程接口。NSUserDefaults對象是用來保存,恢復應用程序相關的偏好設置,配置數據等等。默認系統允許應用程序自定義它的行爲去迎合用戶的喜好。你可以在程序運行的時候從用戶默認的數據庫中讀取程序的設置。同時NSUserDefaults的緩存避免了在每次讀取數據時候都打開用戶默認數據庫的操作。可以通過調用synchronize方法來使內存中的緩存與用戶默認系統進行同步。

NSUserDefaults類提供了非常方便的方法來獲取常用的類型,例如 floats,doubles,intergers,Booleans,URLs。所以一個NSUserDefaults的對象必須是屬性表,這也就是說 我們可以存儲NSData,NSString,NSNUmber,NSDate,NSArray,NSDictionary這些實例。如果你想存儲其他類 型的對象,你要將其歸檔並創建一個NSData來實現存儲。

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

NSUserDefaults是單例,同時也是線程安全的

在使用NSUserDefaults的時候,先看下下面的代碼:

NSDictionary* defaults = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
 
NSLog(@"Defaults: %@", defaults);

 是用來獲取設備上的所有的NSUserDefaults的設置。

上面代碼輸出了

Defaults: {
  AppleITunesStoreItemKinds =     (
     eBook,
 
      document,
 
      "software-update",
 
      booklet,
 
      "itunes-u",
 
      newsstand,
 
      artist,
 
      podcast,
 
      "podcast-episode",
 
      software
 
  );
 
  AppleKeyboards =     (
 
      "zh_Hans-Pinyin@sw=Pinyin;hw=US",
 
      "en_US@hw=US;sw=QWERTY"
 
  );
 
  AppleKeyboardsExpanded = 1;
 
  AppleLanguages =     (
 
      "zh-Hans",
 
      en,
 
      fr,
 
      de,
 
      ja,
 
      nl,
 
      it,
 
      es,
 
      pt,
 
      "pt-PT",
 
      da,
 
      fi,
 
      nb,
 
      sv,
 
      ko,
 
      "zh-Hant",
 
      ru,
 
      pl,
 
      tr,
 
      uk,
 
      ar,
 
      hr,
 
      cs,
 
      el,
 
      he,
 
      ro,
 
      sk,
 
      th,
 
      id,
 
      "en-GB",
 
      ca,
 
      hu,
 
      vi
 
  );

 如果想單獨看某個key的設置,例如:

NSArray *array = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleKeyboards"];
 
NSLog(@"Keyboards: %@", array);

 會輸出

AppleKeyboards =     (
      "zh_Hans-Pinyin@sw=Pinyin;hw=US",
      "en_US@hw=US;sw=QWERTY"
  );

 在看下面的代碼

if([[NSUserDefaults standardUserDefaults] objectForKey:@"message"]==nil){
 
[[NSUserDefaults standardUserDefaults] setObject:@"This_is_my_default_message" forKey:@"message"];
 
}
  

代碼意思是判斷NSUserDefaults的“message”key 在dictionaryRepresentation中是否存在,如果不存在就

設置“message”keyThis_is_my_default_message

在加上句[[NSUserDefaults standardUserDefaults] synchronize];,這樣這個設置就存到默認參數中了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章