iOS开发之NSUserDefaults
来源:互联网 发布:js 雷达扫描效果 编辑:程序博客网 时间:2024/06/07 05:18
NSUserDefaults是系统自带的一个轻量级数据本地化的一个方法,其本质是一个单例。用户名、密码、网址等都适合使用NSUserDefaults来储存。对于自定义的对象需要对其归档才能储存。
1、NSUserDefaults 的基本用法
NSUserDefaults是一个单例,由系统原生自带,使用方法简单,可以让数据本地化,自由传递。
NSUserDefaults可以直接存储的数据类型有:NSString,NSNumber,NSDate,NSArray,NSDictionary,BOOL
存储的方法是使用 Value-Key 的方式:
// 存储 NSString 对象到 NSUserDefaults 中NSString *userName = @"Heracles";NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];[userDefaults setObject: userName forKey:@"userName"];
读取的话只要取出对应的 Key 值就可以了:
// 从 NSUserDefaults 中取出 NSStringNSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];NSString * userName = [userDefaults objectForKey:@"userName"];
其他的基本类型,也可以直接存取,要注意的是 NSUserDefaults 里的对象全是不可变对象
2、NSUserDefaults 的高级使用
前面说过 NSUserDefaults 可以存储基本数据类型,那么对于自定义的对象能存储吗?答案是可以的,不过需要将对象归档成NSData类型,然后储存,不然程序会报错。
下面举例说明 NSUserDefaults 的高级用法
我们建立一个 Person 类,有 姓名 和 性别 两个属性:
.h 文件:
#import <Foundation/Foundation.h>@interface Person : NSObject// 姓名@property(nonatomic, copy) NSString *name;// 性别@property(nonatomic, copy) NSString *sex;@end
这个时候,我们需要在 .h 文件中遵循 NSCoding 协议,然后在 .m 文件中实现 initWithCoder: aDecoder 和encodeWithCoder: aCoder 方法:
.h 文件:
#import <Foundation/Foundation.h>@interface Person : NSObject <NSCoding>// 姓名@property(nonatomic, copy) NSString *name;// 性别@property(nonatomic, copy) NSString *sex;@end
.m 文件:
#import "Person.h"@implementation Person// 归档-(void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:self.name forKey:@"name"]; [aCoder encodeObject:self.sex forKey:@"sex"];}// 反归档-(instancetype)initWithCoder:(NSCoder *)aDecoder { if (self = [super init]) { self.name = [aDecoder decodeObjectForKey:@"name"]; self.sex = [aDecoder decodeObjectForKey:@"sex"]; } return self;}@end
完成以上,就可以开始完成存储到 NSUserDefaults 的方法了:
存储代码如下:
// 初始化对象Person *person = [[Person alloc] init];// 对 person 赋值person.name = @"孙悟空";person.sex = @"男";// 归档NSData *data = [NSKeyedArchiver archivedDataWithRootObject: person];// 存储NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];[userDefaults setObject: data forKey:@"person"];
读取代码如下:
NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];// 读取数据NSdData *data = [userDefaults objectForKey:@"person"];// 反归档Person *person = [NSKeyedUnarchiver unarchiveObjectWithData:data];
以上就是 NSUserDefaults 的一些用法,总之是一个非常方便的轻量级数据本地化的方法。
阅读全文
0 0
- 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
- IOS持久化之NSUserDefaults
- iOS开发-进阶:NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
- iOS开发经验技巧之IOS中NSUserDefaults的用法(轻量级本地数据存储)
- h5表单新增元素与属性form、formaction、formmethod、formenctype、formtarget、autofocus、required、labels
- 7.拷贝构造&堆栈&内存申请
- 主成分分析原理详解
- Nginx的负载均衡的那点事-session和文件上传下载问题
- Oracle over(partition by ...order by ...)
- iOS开发之NSUserDefaults
- 【直播报名】阿里云技术系列直播:异构计算、函数计算、自研数据库…
- Springboot中随时获取ApplicationContext,得到想要的bean
- java I/O InputStream 及子类 FileInputStream 源码分析
- 数据库表设计,没有最好只有最适合(邻接表、路径枚举、嵌套集、闭包表)
- ke-fullscreen.js
- 移动端web开发
- js判断PC端或是移动端
- Ubuntu 16.04安装使用--Ubuntu16.04下基于Docker的Caffe-GPU版本环境搭建总结