NSUserDefaults

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」key爲This_is_my_default_message。 在加上句[[NSUserDefaults standardUserDefaults] synchronize];,這樣這個設置就存到默認參數中了。 也見過別人把默認參數的設置寫到applicationDidFinishLaunching註冊的, - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {      NSDictionary *defaultValues = [NSDictionary dictionaryWithObjectsAndKeys:                                    @"This_is_my_default_message", @"message",                                    nil];     [[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];     [[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:defaultValues]; } 固然寫到applicationDidFinishLaunching中註冊和不寫到裏面效果是同樣的,只是代碼的優美問題。
相關文章
相關標籤/搜索