iOS 轻量级存储
时间:2022-04-24
本文章向大家介绍iOS 轻量级存储,主要内容包括NSUserDefaults简介、NSUserDefaults实例、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
NSUserDefaults简介
在Android和ios都提供了本地轻量级数据存储,底层实现都是基于key-value的方式。Android里面的叫SharedPreferences,ios的叫NSUserDefaults,使用上也是非常的简单。我们先看一看NSUserDefaults的API。
#import <Foundation/NSObject.h>
@class NSArray<ObjectType>, NSData, NSDictionary<KeyValue, ObjectValue>, NSMutableDictionary, NSString, NSURL;
NSUserDefaults 是一个单例,所以就不存在全局问题,需要用到的时候直接取就可以,随时存取,十分方便。 NSUserDefaults支持的数据类型有:NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL。
NSUserDefaults实例
下面我们以一个第一次登录记住密码的功能来讲讲NSUserDefaults。比如说我们要存储 用户名(NSString):userName 密码(NSNumber):userPassword 用户信息(NSDictionary):userInfo
那么我们可以定义如下:
NSString *userName=@"xzh";
NSNumber *userPassword=@123456;
NSDictionary *userInfo=@{
@"age":@29,
@"sex":@"male"
};
BOOL isOn=YES;
接着我们使用NSUserDefaults开始对资料进行存储。
[[NSUserDefaults standardUserDefaults] setObject:userName forKey:@"name"];
[[NSUserDefaults standardUserDefaults] setInteger:[userPassword integerValue] forKey:@"password"];
[[NSUserDefaults standardUserDefaults] setObject:userInfo forKey:@"info"];
[[NSUserDefaults standardUserDefaults] setBool:isOn forKey:@"isOn"];
//调用synchronize存储
[[NSUserDefaults standardUserDefaults] synchronize];
取数据的方法跟存是一样的,取出数据。
NSString *userName=[[NSUserDefaults standardUserDefaults] objectForKey:@"name"];
NSInteger userPassword=[[NSUserDefaults standardUserDefaults] integerForKey:@"password"];
NSDictionary *userInfo=[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"info"];
BOOL isOn=[[NSUserDefaults standardUserDefaults] boolForKey:@"isOn"];
一些其他的方法,如根据键移除某一数据等。
//移除某一键值对
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"name"];
//或者设置为空
[[NSUserDefaults standardUserDefaults] setObject:nil
//获取所有的数据
NSDictionary *allDic=[[NSDictionary alloc]initWithDictionary: [[NSUserDefaults standardUserDefaults]dictionaryRepresentation]];
NSUserDefaults只能存储一些简单的数据类型,如果要存取一些复杂类型的数据(例如实体类),就需要对数据进行归档后转为NSData后存取。
//存一个类 ClassA
ClassA *bc = [[ClassA alloc] init];
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
NSData *saveObject = [NSKeyedArchiver archivedDataWithRootObject:bc];
[ud setObject:saveObject forKey:@"ClassA"];
//下面是取出
NSData *getObject = [ud objectForKey:@"myBusinessCard"];
ClassA *bcNew = [[ClassA alloc] init];
bcNew = [NSKeyedUnarchiver unarchiveObjectWithData:getObject] ;
- Flash/Flex学习笔记(33):如何用As3协同Flash CS IDE控制MovieClip实例
- live writer的折腾
- 用C语言写的万年历---亲手写的。好累哦
- Flash/Flex学习笔记(32):播放音乐并同步显示lyc歌词(适用于Silverlight)
- Flash/Flex学习笔记(31):对象拖拽与投掷
- 如何评价张小龙在2016微信公开课的演讲
- VS2010如何做WAP开发
- (原创)详解KMP算法
- Flash/Flex学习笔记(30):不用startDrag和stopDrag的对象拖动
- JS代码和网页的混用
- Flash/Flex学习笔记(29):MovieClip帧/时间轴的控制
- Oracle日常运维操作总结-数据库的启动和关闭
- Python中Json解析的坑
- Flash/Flex学习笔记(28):动态文本的滚动控制
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 3分钟短文:十年窖藏,Laravel告诉你表单验证的“正确姿势”
- 面试官:说说SpringBoot中Spring容器的启动过程
- Python IO
- Python解析式
- 面试官:Tomcat 的调优怎么做?你的最佳实践有哪些?
- Tomcat源码分析
- lazy-mock ,一个生成后端模拟数据的懒人工具
- Python拉链法和开地址法实现字典
- Springboot2 整合redis发布订阅 解决订阅多个频道重复代码过多 创建很多bean问题
- 爬虫选择器算法漫谈
- Java 类加载机制及双亲委派模型
- Python函数
- Effective C++条款3 我可以不使用const?
- t想成为微信斗图之王么?你需要这款开源工具的力量!
- 蛋糕被切成了几块