一、应用的 bundle和沙盒
1.基本信息:
- bundle 和 沙盒都指的是两个文件目录
- bundle 存放的是应用的可执行文件及其资源图片等
- 沙盒目录可以用来数据存储和读取的操作
注意:一个应用不允许访问其他应用的沙盒目录,只能在自己的沙盒中进行操作
2.沙盒的目录
Document:文档目录,用来存储一些比较重要的数据,由应用本身产生的数据,应用备份的时候,会备份到此文件目录下。注意
一些网络的缓存数据不能放到此目录下,否则,应用上架的时候会被拒绝
Library:此目录下有两个文件夹,Caches缓存目录,是用来保存从网上下载下来的需要持久化的数据,应用在备份的时候不会自动备份此目录,也不会自动删除此目录下的数据,需要程序内部提供删除缓存数据的操作。Preferences是用来保存用户的常用的数据,比如用户在登录的时候,可以将用户名和密码保存到此目录下,等到下次登录的时候,不用再输入账号密码,直接就可以自动登录了。
tmp:临时文件目录,用来保存临时文件的,系统会自动的删除此目录下的临时文件数据。
二、几种数据存储的方式:
-
1、plist 文件存储数据:系统提供的字典数据等可以直接通过 writeToFile:的方式写入文件,使用简单方便,是偏好设置存储的基础
写入:
字典:
// 1.准备数据!
NSDictionary *dict = @{
@"name" : @"leige",
@"age" : @18,
@"xifuer" : @(YES)
};
// 2.写入plist文件!
// 参数1 文件路径! -> documents
// - 获取doc的路径
NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
// - 拼接文件的名称
// stringByAppendingPathComponent -> 在documents的路径基础上拼接 /abc.plist!
NSString *filePath = [docPath stringByAppendingPathComponent:@"/abc.plist"];
NSLog(@"%@", filePath);
// 参数2 原子属性 -> 设置为YES,必要安全.即使程序崩溃,数据写入也ok!
[dict writeToFile:filePath atomically:YES];
数组:
// 1.准备数据!
NSArray *arr = @[
@{
@"name" : @"jack",
@"age" : @"18"
},
@{
@"name" : @"rose",
@"age" : @"21"
},
@{
@"name" : @"gebilaowang",
@"age" : @"38"
}
];
// 2.写入plist文件!
// 参数1 文件路径! -> documents
// - 获取doc的路径
NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
// - 拼接文件的名称
// stringByAppendingPathComponent -> 在documents的路径基础上拼接 /abc.plist!
NSString *filePath = [docPath stringByAppendingPathComponent:@"/abc.plist"];
NSLog(@"%@", filePath);
// 参数2 原子属性 -> 设置为YES,必要安全.即使程序崩溃,数据写入也ok!
[arr writeToFile:filePath atomically:YES];
读取:
字典:
// 1.获取文件路径
NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"abc.plist"];
// 2.加载数据
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:filePath];
数组:
// 1.获取文件路径
NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"abc.plist"];
// 2.加载数据
NSArray *arr = [NSArray arrayWithContentsOfFile:filePath];
-
2、偏好设置存储数据:
1.这是系统提供的 API,方便高效
2.程序员不需要管理存储数据的路径及文件等信息,统一由系统自己负责
3.偏好设置存储的本质是以字典的形式将数据写入到 plist 文件中
存储
// 1.准备数据!
NSInteger font = 16;
NSString *age = @"20";
NSString *score = @"120";
// 1.通过偏好设置存储
// 用户偏好 -> 单例!可以直接去存储数据!
// -获取偏好设置对象
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// - 存储信息
[defaults setInteger:font forKey:@"yy_font"];
[defaults setObject:age forKey:@"yy_age"];
[defaults setObject:score forKey:@"yy_score"];
// 同步 -> 保证数据立刻写入磁盘! iOS7以后就不需要写这行代码! 了解!
// [defaults synchronize];
读取:
// 1.获取偏好设置对象
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// 2.取出数据
NSInteger font = [defaults integerForKey:@"yy_font"];
NSString *age = [defaults objectForKey:@"yy_age"];
NSString *score = [defaults objectForKey:@"yy_score"];
-
3、归档&解档:
它主要用于存储自定义类型的对象
用法:
首先需要遵守 NSCoding 协议 <NSCoding>
实现协议方法,归档时调用:
- (void)encodeWithCoder:(NSCoder *)encoder
解档时调用:
- (instancetype)initWithCoder:(NSCoder *)decoder












网友评论