NSUserDefaults进行轻量级数据持久化操作
关于iOS本地数据持久化操作,除了使用SQLite、CoreData、Plist以及本地沙盒路径(归档)外,还有一种更加轻量级存储方法——NSUserDefaults,用于存储一些简单的数据,类似于字符串,数字,数组,字典等。
NSUserDefaults 实际上是一个单例,只有一个实例对象,在程序中通过方法: + (NSUserDefaults *)standardUserDefaults; 进行实例化。也就是说,无论使用多少个不同的名称的对象调用它的方法,都能获取存储在 NSUserDefaults 中的数据。
这是 NSUserDefaults.h 源文件中储存/获取数据的方法,存储方式是KVC :
// 通过key获取数据(对象类型) - (nullable id)objectForKey:(NSString *)defaultName; // 通过key存储数据(对象类型) - (void)setObject:(nullable id)value forKey:(NSString *)defaultName; // 通过key删除数据 - (void)removeObjectForKey:(NSString *)defaultName; // 通过key获取数据:字符串,数组,字典,data,字符串数组,整型,(单、双精度)浮点型,布尔值,URL等 - (nullable NSString *)stringForKey:(NSString *)defaultName; - (nullable NSArray *)arrayForKey:(NSString *)defaultName; - (nullable NSDictionary<NSString *, id> *)dictionaryForKey:(NSString *)defaultName; - (nullable NSData *)dataForKey:(NSString *)defaultName; - (nullable NSArray<NSString *> *)stringArrayForKey:(NSString *)defaultName; - (NSInteger)integerForKey:(NSString *)defaultName; - (float)floatForKey:(NSString *)defaultName; - (double)doubleForKey:(NSString *)defaultName; - (BOOL)boolForKey:(NSString *)defaultName; - (nullable NSURL *)URLForKey:(NSString *)defaultName NS_AVAILABLE(10_6, 4_0); // 通过key存储数据:整型,(单、双精度)浮点型,布尔值,URL - (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:(nullable NSURL *)url forKey:(NSString *)defaultName NS_AVAILABLE(10_6, 4_0);
现在,通过代码实现一下:
1 #import "ViewController.h" 2 3 @interface ViewController () 4 5 @property (weak, nonatomic) IBOutlet UITextField *textSave; 6 @property (weak, nonatomic) IBOutlet UITextField *textShow; 7 8 @end 9 10 @implementation ViewController 11 12 - (void)viewDidLoad { 13 [super viewDidLoad]; 14 } 15 16 #pragma mark 储存文本 17 - (IBAction)saveText:(UIButton *)sender { 18 19 if(_textSave.text){ 20 // 存储文本数据 21 [[NSUserDefaults standardUserDefaults]setObject:_textSave.text forKey:@"text"]; 22 } 23 24 } 25 26 #pragma mark 显示文本 27 - (IBAction)showText:(UIButton *)sender { 28 29 if([[NSUserDefaults standardUserDefaults]stringForKey:@"text"]){ 30 // 通过key获取存储文本 31 _textShow.text = [[NSUserDefaults standardUserDefaults] stringForKey:@"text"]; 32 } 33 34 } 35 36 - (void)didReceiveMemoryWarning { 37 [super didReceiveMemoryWarning]; 38 // Dispose of any resources that can be recreated. 39 } 40 41 @end