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
- NSUserDefaults 的简单用法-数据存储
- NSUserDefaults简单的数据存储
- NSUserDefaults的简单用法;
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- iOS中NSUserDefaults的用法(轻量级本地数据存储)
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- iOS中NSUserDefaults的用法(轻量级本地数据存储)
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- To_10_r_100_8_6---有304瓶啤酒,每3个空瓶子能换一瓶新啤酒,问能喝到多少瓶啤酒?
- 自定义 TabBar
- MySQL索引背后的数据结构及算法原理
- IOS 自定义字体
- rails4 will_paginate ajax 局部刷新
- NSUserDefaults 的简单用法-数据存储
- 亿级Web系统搭建:单机到分布式集群
- Gdi+与双缓冲的图片显示(应用篇)
- Spark SQL官方文档阅读--待完善
- Sentinel-Redis高可用方案(二):主从切换
- InvocationTargetException
- Android使用UncaughtExceptionHandler捕获全局异常
- 动态规划-背包问题总述
- 数据处理