数据在沙盒中存储的三种方法---plist存储,偏好设置存储,归档
2015-07-30 22:49
417 查看
一:plist存储,存储在Caches文件夹下
//存储的路径:
沙盒路径/Library/Caches文件/文件名
// 1.plist存储,生成一个plist文件.
// 2.plist不是数组就是字典,plist存储就是用来存储字典或者数组.
//
注意:Plist不能存储自定义对象
//
创建数组
NSArray *arr =
@[@"123",@1,@"abc"];
//
存储数据,存储应用沙盒(应用的文件夹中)
//
获取沙盒路径
// NSLog(@"%@",NSHomeDirectory());
//
直接应用沙盒中Caches文件路径
// directory:获取哪个文件夹
// domainMask:在哪个范围内搜索,NSUserDomainMask:表示在用户的手机上查找
// expandTilde:是否展开全路径 YES:表示展开全路径 NO:不会展开全路径,会把应用沙盒的路径用波浪号(~)代替
//
获取到Caches文件夹路径
NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask,
YES)[0];
//
拼接文件名
NSString *filePath = [cachePath stringByAppendingPathComponent:@"/arr.plist"];
// File:文件的全路径
[arr writeToFile:filePath atomically:YES];
二:偏好设置存储在Preferences文件夹下:
//存储的路径:
沙盒路径/Library/Preferences文件/文件名
// 偏好设置存储
// 好处:1>
不用关心文件路径
2> 可以存储基本数据类型
3> 快速进行键值对存储
// 获取偏好设置存储对象单例
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
// 存储对象
[userDefaults setObject:@5 forKey:@"age"];
// 存储基本数据类型
[userDefaults setInteger:10 forKey:@"num"];
三:归档
// 归档:存储自定义对象
// 存储路径:沙盒/temp文件名/文件名
// 创建person
Person *p = [[Person alloc] init];
p.age =
18;
p.name =
@"a";
// 获取tem文件夹路径
NSString *tempPath = NSTemporaryDirectory();
// 拼接文件名
NSString *filePath = [tempPath stringByAppendingPathComponent:@"person.data"];
// NSKeyedArchiver专门用来做自定义对象归档
[NSKeyedArchiver archiveRootObject:p toFile:filePath];
// p encodeWithCoder:
// 解档
// 获取tem文件夹路径
NSString *tempPath = NSTemporaryDirectory();
// 拼接文件名
NSString *filePath = [tempPath stringByAppendingPathComponent:@"person.data"];
// 解档
Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
需给自定义的对象遵守NScode协议,并实现下面两个方法
// 什么时候调用:当一个对象要归档的时候就会调用这个方法归档
// 作用:告诉苹果当前对象中哪些属性需要归档
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:_name forKey:@"name"];
[aCoder encodeInt:_age forKey:@"age"];
}
// 什么时候调用:当一个对象要解档的时候就会调用这个方法解档
// 作用:告诉苹果当前对象中哪些属性需要解档
// initWithCoder什么时候调用:只要解析一个文件的时候就会调用
/ / 延伸:UIView遵守了NScoding协议:加载xib或者Story Board的控件的时候就会调用initWithCoder方法
- (id)initWithCoder:(NSCoder *)aDecoder
{
// 当父类遵守了NScoding协议的时候需要调用父类的[super initWithCoder]方法
#warning [super initWithCoder]
if (self = [super init]) {
// 解档
//
注意一定要记得给成员属性赋值
_name = [aDecoder decodeObjectForKey:@"name"];
_age = [aDecoder decodeIntForKey:@"age"];
}
return
self;
}
// 什么时候调用:当一个对象要归档的时候就会调用这个方法归档
// 作用:告诉苹果当前对象中哪些属性需要归档
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:_name forKey:@"name"];
[aCoder encodeInt:_age forKey:@"age"];
}
// 什么时候调用:当一个对象要解档的时候就会调用这个方法解档
// 作用:告诉苹果当前对象中哪些属性需要解档
// initWithCoder什么时候调用:只要解析一个文件的时候就会调用
- (id)initWithCoder:(NSCoder *)aDecoder
{
#warning [super initWithCoder]
if (self = [super init]) {
// 解档
//
注意一定要记得给成员属性赋值
_name = [aDecoder decodeObjectForKey:@"name"];
_age = [aDecoder decodeIntForKey:@"age"];
}
return
self;
}
//存储的路径:
沙盒路径/Library/Caches文件/文件名
// 1.plist存储,生成一个plist文件.
// 2.plist不是数组就是字典,plist存储就是用来存储字典或者数组.
//
注意:Plist不能存储自定义对象
//
创建数组
NSArray *arr =
@[@"123",@1,@"abc"];
//
存储数据,存储应用沙盒(应用的文件夹中)
//
获取沙盒路径
// NSLog(@"%@",NSHomeDirectory());
//
直接应用沙盒中Caches文件路径
// directory:获取哪个文件夹
// domainMask:在哪个范围内搜索,NSUserDomainMask:表示在用户的手机上查找
// expandTilde:是否展开全路径 YES:表示展开全路径 NO:不会展开全路径,会把应用沙盒的路径用波浪号(~)代替
//
获取到Caches文件夹路径
NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask,
YES)[0];
//
拼接文件名
NSString *filePath = [cachePath stringByAppendingPathComponent:@"/arr.plist"];
// File:文件的全路径
[arr writeToFile:filePath atomically:YES];
二:偏好设置存储在Preferences文件夹下:
//存储的路径:
沙盒路径/Library/Preferences文件/文件名
// 偏好设置存储
// 好处:1>
不用关心文件路径
2> 可以存储基本数据类型
3> 快速进行键值对存储
// 获取偏好设置存储对象单例
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
// 存储对象
[userDefaults setObject:@5 forKey:@"age"];
// 存储基本数据类型
[userDefaults setInteger:10 forKey:@"num"];
三:归档
// 归档:存储自定义对象
// 存储路径:沙盒/temp文件名/文件名
// 创建person
Person *p = [[Person alloc] init];
p.age =
18;
p.name =
@"a";
// 获取tem文件夹路径
NSString *tempPath = NSTemporaryDirectory();
// 拼接文件名
NSString *filePath = [tempPath stringByAppendingPathComponent:@"person.data"];
// NSKeyedArchiver专门用来做自定义对象归档
[NSKeyedArchiver archiveRootObject:p toFile:filePath];
// p encodeWithCoder:
// 解档
// 获取tem文件夹路径
NSString *tempPath = NSTemporaryDirectory();
// 拼接文件名
NSString *filePath = [tempPath stringByAppendingPathComponent:@"person.data"];
// 解档
Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
需给自定义的对象遵守NScode协议,并实现下面两个方法
// 什么时候调用:当一个对象要归档的时候就会调用这个方法归档
// 作用:告诉苹果当前对象中哪些属性需要归档
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:_name forKey:@"name"];
[aCoder encodeInt:_age forKey:@"age"];
}
// 什么时候调用:当一个对象要解档的时候就会调用这个方法解档
// 作用:告诉苹果当前对象中哪些属性需要解档
// initWithCoder什么时候调用:只要解析一个文件的时候就会调用
/ / 延伸:UIView遵守了NScoding协议:加载xib或者Story Board的控件的时候就会调用initWithCoder方法
- (id)initWithCoder:(NSCoder *)aDecoder
{
// 当父类遵守了NScoding协议的时候需要调用父类的[super initWithCoder]方法
#warning [super initWithCoder]
if (self = [super init]) {
// 解档
//
注意一定要记得给成员属性赋值
_name = [aDecoder decodeObjectForKey:@"name"];
_age = [aDecoder decodeIntForKey:@"age"];
}
return
self;
}
// 什么时候调用:当一个对象要归档的时候就会调用这个方法归档
// 作用:告诉苹果当前对象中哪些属性需要归档
- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:_name forKey:@"name"];
[aCoder encodeInt:_age forKey:@"age"];
}
// 什么时候调用:当一个对象要解档的时候就会调用这个方法解档
// 作用:告诉苹果当前对象中哪些属性需要解档
// initWithCoder什么时候调用:只要解析一个文件的时候就会调用
- (id)initWithCoder:(NSCoder *)aDecoder
{
#warning [super initWithCoder]
if (self = [super init]) {
// 解档
//
注意一定要记得给成员属性赋值
_name = [aDecoder decodeObjectForKey:@"name"];
_age = [aDecoder decodeIntForKey:@"age"];
}
return
self;
}
相关文章推荐
- 微软发布令牌漏洞公告:可绕过 Chromium 沙盒执行任意代码
- Tomcat端口被占用解决方法(不用重启)
- “传奇”图象数据存储方式
- 超大数据量存储常用数据库分表分库算法总结
- SQL Server误区30日谈 第18天 有关FileStream的存储,垃圾回收以及其它
- C++实现图的邻接表存储和广度优先遍历实例分析
- C#调用sql2000存储过程方法小结
- PHP 存储文本换行实现方法
- 注册表中存储数据库链接字符串的方法
- Mysql中存储UUID去除横线的方法
- 深入PHP变量存储的详解
- MySQL存储毫秒数据的方法
- Android App中各种数据保存方式的使用实例总结
- Android在不使用数据库的情况下存储数据的方法
- MongoDB系列教程(八):GridFS存储详解
- web.py在SAE中的Session问题解决方法(使用mysql存储)
- 我对块存储,文件存储,对象存储的认识
- iOS MDM设备Authenticate、TokenUpdate及设备管控流程介绍
- iOS MDM设备Authenticate、TokenUpdate及设备管控流程介绍
- iOS MDM设备Authenticate、TokenUpdate及设备管控流程介绍