iOS本地的缓存的方式
2015-09-28 14:42
489 查看
一、 NSKeyedArchiver(归档)采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。
// -------------遵循协议后必须实现的两个方法--------------
//1,编码。编码的是属性(对应于归档的时候)(序列化)
-(void)encodeWithCoder:(NSCoder *)aCoder
{
//需要对每一个属性就行编码
[aCoder encodeObject:self.name forKey:@"name"];//1,随便起名,但是必须跟下面的对应
[aCoder encodeObject:self.sex forKey:@"sex1"];
}
//2,解码。(对应的是反归档的时候)(反序列化)
-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
//将编码好的数据,反编码回到本身的属性上
self.name = [aDecoder decodeObjectForKey:@"name"];
self.sex = [aDecoder decodeObjectForKey:@"sex1"];//2,必须跟上面的对应一样
}
return self;
}
//-------归档步骤
//1,有一个遵守了NSCoding协议的复杂对象
//2,初始化对象
//3,创建一个NSMutableData
//4,使用NSMutableData初始化归档工具NSKeyedArchiver
//5,通过工具NSKeyedArchiver将复杂对象编码到NSMutableData里面
//6,结束编码
//7,将NSMutableData写入本地
//-------反归档步骤
//1,通过路径拿到NSData数据(里面存放的是Person复杂对象跟key值)
//2,通过NSData初始化一个反归档工具NSKeyedUnarchiver
//3,通过key值拿到编码的对象,把编码好的数据反编码到本身的属性上
//4,通过初始化一个Person类,通过key值接收解档后的数据
//5,结束反归档
二、 NSUserDefaults:用来保存应用程序设置和属性、用户保存的数据。用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的简单数据类型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。(版本号,是否首次登陆,存储的是登陆之后的用户名和用户信息)
//存值
NSUserDefaults *user1 = [NSUserDefaults standardUserDefaults];
[user1 setObject:@"名字" forKey:@"name"];
//取值
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
NSLog(@"%@",[user objectForKey:@"name"]);
三、 Write写入方式:永久保存在磁盘中。(直接写入本地,遵守了NSCoding协议Foundation框架下的简单对象:NSString、NSArray、NSDictionary、NSData二进制对象)
1,二进制对象可能存储的是图像、字符串等等
2,创建写入的地址,后面拼接文件名,如果没有的话,会自动创建,如果有,直接写入,文件的格式没什么用
注意:
1,直接写入本地的时候,第一次写入之后,如果再次对同一个文件进行写入操作,会覆盖前面的数据
2, 一次只能写入一条数据(这是当一次需要写入大量数据时用数组写入的原因)
3,如果不想覆盖,就先读出来,然后一起再写进去
4,所有能够直接写入本地的,一定要遵守NSCoding协议
iOS 只有 NSString、NSArray、NSDictionary、NSData(以及它们对应的可变量)可以直接在沙盒写入,其他的一概不能直接写入----而且数组或者字典等这些容器里面存储的数据必须是上述数据-------
四、 SQLite(FMDB、CoreData)
NSCoding + NSKeyedArchiver实现复杂对象的存储。
常见的数据库:1,SQL 2,My SQL 3,Oracle
数据库:1,以一定方式存储在一起
2,能为多个用户共享
3,具有尽可能小得冗余度
4,与程序彼此独立的数据集合
一,库
二,表:主键,普通键,外键(其他表的主键)
三,字段
SQL命令:1,数据插入命令(Insert)
2,数据更新命令(Update)
3,数据删除命令(Delete)
4,数据检索命令(Select)
// -------------遵循协议后必须实现的两个方法--------------
//1,编码。编码的是属性(对应于归档的时候)(序列化)
-(void)encodeWithCoder:(NSCoder *)aCoder
{
//需要对每一个属性就行编码
[aCoder encodeObject:self.name forKey:@"name"];//1,随便起名,但是必须跟下面的对应
[aCoder encodeObject:self.sex forKey:@"sex1"];
}
//2,解码。(对应的是反归档的时候)(反序列化)
-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
//将编码好的数据,反编码回到本身的属性上
self.name = [aDecoder decodeObjectForKey:@"name"];
self.sex = [aDecoder decodeObjectForKey:@"sex1"];//2,必须跟上面的对应一样
}
return self;
}
//-------归档步骤
//1,有一个遵守了NSCoding协议的复杂对象
//2,初始化对象
//3,创建一个NSMutableData
//4,使用NSMutableData初始化归档工具NSKeyedArchiver
//5,通过工具NSKeyedArchiver将复杂对象编码到NSMutableData里面
//6,结束编码
//7,将NSMutableData写入本地
//-------反归档步骤
//1,通过路径拿到NSData数据(里面存放的是Person复杂对象跟key值)
//2,通过NSData初始化一个反归档工具NSKeyedUnarchiver
//3,通过key值拿到编码的对象,把编码好的数据反编码到本身的属性上
//4,通过初始化一个Person类,通过key值接收解档后的数据
//5,结束反归档
二、 NSUserDefaults:用来保存应用程序设置和属性、用户保存的数据。用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的简单数据类型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。(版本号,是否首次登陆,存储的是登陆之后的用户名和用户信息)
//存值
NSUserDefaults *user1 = [NSUserDefaults standardUserDefaults];
[user1 setObject:@"名字" forKey:@"name"];
//取值
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
NSLog(@"%@",[user objectForKey:@"name"]);
三、 Write写入方式:永久保存在磁盘中。(直接写入本地,遵守了NSCoding协议Foundation框架下的简单对象:NSString、NSArray、NSDictionary、NSData二进制对象)
1,二进制对象可能存储的是图像、字符串等等
2,创建写入的地址,后面拼接文件名,如果没有的话,会自动创建,如果有,直接写入,文件的格式没什么用
注意:
1,直接写入本地的时候,第一次写入之后,如果再次对同一个文件进行写入操作,会覆盖前面的数据
2, 一次只能写入一条数据(这是当一次需要写入大量数据时用数组写入的原因)
3,如果不想覆盖,就先读出来,然后一起再写进去
4,所有能够直接写入本地的,一定要遵守NSCoding协议
iOS 只有 NSString、NSArray、NSDictionary、NSData(以及它们对应的可变量)可以直接在沙盒写入,其他的一概不能直接写入----而且数组或者字典等这些容器里面存储的数据必须是上述数据-------
四、 SQLite(FMDB、CoreData)
NSCoding + NSKeyedArchiver实现复杂对象的存储。
常见的数据库:1,SQL 2,My SQL 3,Oracle
数据库:1,以一定方式存储在一起
2,能为多个用户共享
3,具有尽可能小得冗余度
4,与程序彼此独立的数据集合
一,库
二,表:主键,普通键,外键(其他表的主键)
三,字段
SQL命令:1,数据插入命令(Insert)
2,数据更新命令(Update)
3,数据删除命令(Delete)
4,数据检索命令(Select)
相关文章推荐
- Error:IOS集成支付宝出现的错误
- iOS开发引入第三方类库的问题
- iOS应用之地图
- ios 里如何判断当前应用的定位服务是否可用
- iOS8 【xcode6中添加pch全局引用文件】
- 关于真机测试证书的申请
- ios去掉navigationController和tabBarController里的边框黑线
- iostat分析磁盘的IO状况
- iOS9适配
- iOS蓝牙4.0
- IOS开发—对当前屏幕闲置时间计时
- iOS上如何让按钮文本左对齐问题
- Nagios
- 实现iOS全局禁止横屏,但kxmovie全屏横屏播放视频
- iOS页面间传值的方式(Delegate/NSNotification/Block/NSUserDefault/单例)
- ios模拟器不响应电脑键盘解决方法
- iOS - 验证输入的是否是正确的身份证号码和手机号码
- iOS Xcode错误: linker command failed with exit code 1 (use -v to see invocation) 可能错误与处理方法
- 企业级分发-ios9新特性
- iOS开发详解之几种基础动画篇