轉自: http://blog.csdn.net/totogogo/article/details/7473851
NSUserDefaults用於存儲一些app setting。當你關閉app之后再打開后,之前存儲的setting依然可以從NSUserDefaults里讀取。注意:密碼最好不要存儲在NSUserDefaults里,要存儲也必須用AES/DES加密存儲,更安全的方法是 https://github.com/ldandersen/scifihifi-iphone
把密碼存儲在NSUserDefault or plist里的后果: http://www.shushao.com/news/info/item/203510-ios
example 1: 讀取NSUserDefaults里的"color" setting
- [[NSUserDefaults standardUserDefaults] stringForKey:@"color"];
example 2: 寫入NSUserDefaults里的"color" setting為"red"
- [[NSUserDefaults standardUserDefaults] setObject:@"red" forKey:@"color"];
另外NSUserDefaults還提供了一個registerDefaults方法,通常在appDelegate的didFinishLaunchingWithOptions里調用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- {
- NSDictionary *defaultValues = [NSDictionary dictionaryWithObjectsAndKeys: @"blue", @"color",nil];
- [[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
- return YES;
- }
registerDefaults方法調用時會check NSUserDefaults里是否已經存在了相同的key,如果有則不會把其覆蓋。舉個例子:
1 當第一次run上面的app時,"color"="blue"會寫入NSUserDefaults里
2 然后你的app調用了
- [[NSUserDefaults standardUserDefaults] setObject:@"red" forKey:@"color"];
這時NSUserDefaults里"color"="red"
3. exit app and restart it,registerDefaults方法還是會被調用,但它check到"color" key已經存在,就不會把它寫入NSUserDefaults中
這時NSUserDefaults里"color"="red"
4. 修改registerDefaults方法變成
- NSDictionary *defaultValues = [NSDictionary dictionaryWithObjectsAndKeys: @"black", @"color",nil];
- [[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
然后重新run app,之后NSUserDefaults里依然"color"="red"
5. 修改registerDefaults方法變成
- NSDictionary *defaultValues = [NSDictionary dictionaryWithObjectsAndKeys: @"black", @"color",@"tomson", @"username",nil];
- [[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
然后重新run app,之后NSUserDefaults里依然"color"="red",不過多了a pair of key-value: username=tomson
注意:
* If you terminate your app by pressing "Stop" in Xcode (in the Simulator or on the device), your User Defaults might get saved
* 我沒試過NSUserDefaults在exit app之后被保存,有人說碰到,並給出代碼調用""的解決方案
ref links:
http://stackoverflow.com/questions/6033385/nsuserdefaults-not-being-saved-in-simulator
http://stackoverflow.com/questions/2622754/why-is-nsuserdefaults-not-saving-my-values