NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名、密码之类的,个人觉得使用NSUserDefaults是首选。下次再登陆的时候就可以直接从NSUserDefaults里面读取上次登陆的信息
要点:
1)NSUserDefaults非常好用,并不需要用户在程序中设置NSUserDefaults的全局变量,需要在哪里使用NSUserDefaults的数据,那么就在哪里创建一个NSUserDefaults对象,然后进行读或者写操作。
2)针对同一个关键字对应的对象或者数据,可以对它进行重写,重写之后关键字就对应新的对象或者数据,旧的对象或者数据会被自动清理。
创建一个user defaults方法有多个,最简单得快速创建方法:
NSDictionary *myDictionary = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"enuo", @"20", nil] forKeys:[NSArray arrayWithObjects:@"name", @"age", nil]];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
添加数据到 user defaults:
//存储时,除NSNumber类型使用对应的类型意外,其他的都是使用setObject:forKey:
[userDefaults setObject:nameField.text forKey:UserDefaultNameKey];
[userDefaults setInteger:myInteger forKey:@"myInteger"];
[userDefaults setBool:YES forKey:UserDefaultBoolKey];
[userDefaults setObject:myDictionary forKey:@"myDictionary"];
[userDefaults synchronize]; //这里建议同步存储到磁盘中,但是不是必须的 可以通过调用synchronize方法来使内存中的缓存与用户默认系统进行同步。
从user defaults中获取数据:
[userDefaults objectForKey:UserDefaultNameKey] ;
[userDefaultes integerForKey:@"myInteger"];
[userDefaults boolForKey: UserDefaultBoolKey];
//读取字典类型NSDictionary类型的数据
NSDictionary *myDictionary = [userDefaultes dictionaryForKey:@"myDictionary"];
NSString *myDicString = [NSString stringWithFormat:@"name:%@, age:%d",[myDictionary valueForKey:@"name"], [[myDictionary valueForKey:@"age"] integerValue]];
txtNSDictionary.text = myDicString;
NSUserDefaults是单例,同时也是线程安全的。
从NSUserDefaults返回的值是不可改变的,即便是你在存储的时候使用的是可变的值。例如你使用mutable string做为“MyStringDefault”的值,当你做使用stringForKey:方法获取的值,这个值仍然是不可变的。
在使用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];,这样这个设置就存到默认参数中了。