数据持久化:就是把数据从内存中写入到本地(对于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());
}