NSUserDefaults 的简单用法-数据存储

来源:互联网 发布:淘宝直播中控台网址 编辑:程序博客网 时间:2024/05/01 16:38

 NSUserDefaults对象是用来保存,恢复应用程序相关的偏好设置,配置数据等等

轻量级的保存数据 很方便我们的使用 ,我们还需要了解synchronize 同步写入,因为系统默认写入是随机的,

如果我们没有同步写入沙盒的话,那么我们有可能取不到我们刚存储进去的值供我们使用

NSUserDefaults类提供了一个与默认系统进行交互的编程接口。默认系统允许应用程序自定义它的行为去迎合用户的喜好。你可以在程序运行的时候从用户默认的数据库中读取程序的设置。同时NSUserDefaults的缓存避免了在每次读取数据时候都打开用户默认数据库的操作。可以通过调用synchronize方法来使内存中的缓存与用户默认系统进行同步。

NSUserDefaults类提供了非常方便的方法来获取常用的类型,例如 floats,doubles,intergers,Booleans,URLs。所以一个NSUserDefaults的对象必须是属性表,这也就是说 我们可以存储NSData,NSString,NSNUmber,NSDate,NSArray,NSDictionary这些实例。如果你想存储其他类 型的对象,你要将其归档并创建一个NSData来实现存储。

如果我们想要存储自定义对象的话,仅仅使用NSUserDefaults 是实现不了的

我们需要将我们想要存储的数据转化为二进制流来进行保存

从NSUserDefaults返回的值是不可改变的,即便是你在存储的时候使用的是可变的值。例如你使用mutable string做为“MyStringDefault”的值,当你做使用stringForKey:方法获取的值,这个值仍然是不可变的。


下面是apple 给我们提供的一些方法 

我们可以了解到它的方法和使用范围  NSUserDefaults是单例,同时也是线程安全的

+ (NSUserDefaults *)standardUserDefaults;+ (void)resetStandardUserDefaults;- (instancetype)init;- (instancetype)initWithSuiteName:(NSString *)suitename NS_AVAILABLE(10_9, 7_0) NS_DESIGNATED_INITIALIZER; //nil suite means use the default search list that +standardUserDefaults uses- (id)initWithUser:(NSString *)username NS_DEPRECATED(10_0, 10_9, 2_0, 7_0);- (id)objectForKey:(NSString *)defaultName;- (void)setObject:(id)value forKey:(NSString *)defaultName;- (void)removeObjectForKey:(NSString *)defaultName;- (NSString *)stringForKey:(NSString *)defaultName;- (NSArray *)arrayForKey:(NSString *)defaultName;- (NSDictionary *)dictionaryForKey:(NSString *)defaultName;- (NSData *)dataForKey:(NSString *)defaultName;- (NSArray *)stringArrayForKey:(NSString *)defaultName;- (NSInteger)integerForKey:(NSString *)defaultName;- (float)floatForKey:(NSString *)defaultName;- (double)doubleForKey:(NSString *)defaultName;- (BOOL)boolForKey:(NSString *)defaultName;- (NSURL *)URLForKey:(NSString *)defaultName NS_AVAILABLE(10_6, 4_0);- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;- (void)setFloat:(float)value forKey:(NSString *)defaultName;- (void)setDouble:(double)value forKey:(NSString *)defaultName;- (void)setBool:(BOOL)value forKey:(NSString *)defaultName;- (void)setURL:(NSURL *)url forKey:(NSString *)defaultName NS_AVAILABLE(10_6, 4_0);- (void)registerDefaults:(NSDictionary *)registrationDictionary;- (void)addSuiteNamed:(NSString *)suiteName;- (void)removeSuiteNamed:(NSString *)suiteName;- (NSDictionary *)dictionaryRepresentation;@property (readonly, copy) NSArray *volatileDomainNames;- (NSDictionary *)volatileDomainForName:(NSString *)domainName;- (void)setVolatileDomain:(NSDictionary *)domain forName:(NSString *)domainName;- (void)removeVolatileDomainForName:(NSString *)domainName;- (NSArray *)persistentDomainNames NS_DEPRECATED(10_0, 10_9, 2_0, 7_0);- (NSDictionary *)persistentDomainForName:(NSString *)domainName;- (void)setPersistentDomain:(NSDictionary *)domain forName:(NSString *)domainName;- (void)removePersistentDomainForName:(NSString *)domainName;- (BOOL)synchronize;- (BOOL)objectIsForcedForKey:(NSString *)key;- (BOOL)objectIsForcedForKey:(NSString *)key inDomain:(NSString *)domain;@end

下面给出一个简单的例子,我们做个登录页面 每次登录的用户名密码会保存到沙盒

下次登录会直接取出来不用用户再次输入

#import "ViewController.h"#import "User.h"#import "UserDefaultKeysConfig.h"@interface ViewController ()@property (weak, nonatomic) IBOutlet UITextField *usernameTextField;@property (weak, nonatomic) IBOutlet UITextField *passwdTextField;- (IBAction)loginBtn:(id)sender;- (IBAction)exitBtn:(id)sender;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];        //    self.usernameTextField.text = @"angel";//    self.passwdTextField.text = @"123456";    self.usernameTextField.text = [[NSUserDefaults standardUserDefaults]objectForKey:kUserNameKey];    self.passwdTextField.text = [[NSUserDefaults standardUserDefaults]objectForKey:kUserPwdKey];    // Do any additional setup after loading the view, typically from a nib.}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}//点击登陆按钮 将信息存储到沙盒- (IBAction)loginBtn:(id)sender {        [[NSUserDefaults standardUserDefaults]setObject:self.usernameTextField.text forKey:kUserNameKey];    [[NSUserDefaults standardUserDefaults]setObject:self.passwdTextField.text forKey:kUserPwdKey];        //同步写入文件    [[NSUserDefaults standardUserDefaults]synchronize];    }- (IBAction)exitBtn:(id)sender {            [[NSUserDefaults standardUserDefaults]removeObjectForKey:kUserNameKey];    [[NSUserDefaults standardUserDefaults]removeObjectForKey:kUserPwdKey];    [[NSUserDefaults standardUserDefaults]synchronize];        self.usernameTextField.text = @"";    self.passwdTextField.text = @"";}@end


0 0
原创粉丝点击