NSUserDefaults
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:方法获取的值,这个值仍然是不可变的。
/UsersLibrary/Application Support/iPhoneSimulator/4.1/Applicati*****/29788E40-AF47-45A0-8E92-3AC0F501B7F4/,(这个是应用程序对应在mac上的位置)
这个下面有/Library/Prefereces,里面有个plist文件,存储的就是你的userDefaults
想要删掉的话,用removeObjectForKey或者删掉沙盒,也就是你的应用程序然后重新安装。
在使用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];,这样这个设置就存到默认参数中了。