数据持久化:就是把数据从内存中写入到本地(对于iOS开发来说,就是把数据写入到应用的沙盒文件夹在中).
沙盒(SandBox):沙盒的本质就是文件夹,iOS采用沙盒机制来管理每一个安装到手机上的应用,每一个应用都有一个沙盒,而且这个沙盒相对独立,封闭的,安全的,通常情况下只有自己才能访问自己.
沙盒安全机制:沙盒的文件是随机生成的,而且每次都会生成一个沙盒的文件名,且采用十六进制数字命名法.
#import "ViewController.h"
#define kName @"iOS"
#define kPassword @"123456"
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self handleSandBox];
}
// 沙盒知识点
- (void)handleSandBox{
// 获取沙盒文件路径: NSHomeDirectory()沙盒文件的路径
NSLog(@"%@",NSHomeDirectory());
// 获取应用程序包的路径: [[NSBundle mainBundle]bundlePath]
// Xcode6.0和iOS8.0之前应用程序包和沙盒是在同一个文件夹下面,之后就将他们两个分开放置了
NSLog(@"%@",[[NSBundle mainBundle]bundlePath]);
// 沙盒文件中系统帮我们生成一些文件夹,每一个文件夹都有自己的作用
/*
Documents:这个文件夹中的数据将会和ituns进行同步,这个文件夹中不会存放太大的数据,如果数据量比较大就会对苹果的服务器造成很大压力,如果这里面放一些比较大的数据,程序 审核时会直接拒掉
Library:
Caches:把大数据放在Library下的Caches文件夹中(电影,音乐等),这个文件夹下的数据不会和ituns同步
Perferences:这个文件也会和ituns同步,这里一般存储用户的偏好设置(比如:用户是否第一次登录,登录的数据)
tmp:临时的文件路径,不会进行同步,一般存放的是压缩文件(.zip),这里的数据当我们的手机重用启动时,会自动清空.
*/
// 如何获取沙盒文件夹下的其它文件的路径?只有获取到路径才能方便我们存储数据
/* 这个是其中一中写法,一般不用
NSString *documentsPath = [NSHomeDirectory() stringByAppendingString:@"/Doucuments"];
NSLog(@"%@",documentsPath);
*/
// 获取Documents文件路径(一般是在用户域下)
// 参数1:要搜索的文件夹(搜索的优先级 user->local->newWord->system)
// 参数2:搜索域(域:用户域 本地域 网域 系统域)
// 参数3:是否返回绝对路径
// 最早这个方法用于MAC端开发,对PC用户来说可以有多个用户,所以该方法的返回值是个数组,而现在这个方法用于iOS端开发,手机用户只有一个,所以只需取出数组中唯一元素即可.
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES)lastObject];
NSLog(@"%@",documentsPath);
// 获取Library文件路径
NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)lastObject];
NSLog(@"%@",libraryPath);
// 获取Caches文件夹路径
NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];
NSLog(@"%@",cachesPath);
// 获取perferences文件路径:只能通过NSUserDefaults这个类操作这个文件夹
// NSUserDefaults用户偏好设置类,是一个单例
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// 模拟用户第一次登陆:view的背景是红色,以后就是绿色
BOOL isFirst = [defaults boolForKey:@"isFirst"];
if (isFirst) {// 以后的登陆情况
self.view.backgroundColor = [UIColor greenColor];
}else{// 第一次登陆的情况
self.view.backgroundColor = [UIColor redColor];
[defaults setBool:YES forKey:@"isFirst"];
}
// 简单模拟等一次登陆存储用户名和密码,以后直接显示登陆成功
NSString *name = [defaults valueForKey:@"name"];
NSString *password = [defaults valueForKey:@"password"];
if ([name isEqualToString:kName] && [password isEqualToString:kPassword]) {// 以后登陆
NSLog(@"登陆成功");
}else{// 第一次登陆
NSLog(@"请输入用户名和密码");
[defaults setObject:@"iOS" forKey:@"name"];
[defaults setObject:@"123456" forKey:@"password"];
}
// 获取tmp文件夹路径
NSLog(@"%@",NSTemporaryDirectory());
}