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];,這樣這個設置就存到默認參數中了。
