码迷,mamicode.com
首页 > 移动开发 > 详细

iOS的沙盒机制

时间:2016-04-29 22:11:41      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:

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

}

 

iOS的沙盒机制

标签:

原文地址:http://www.cnblogs.com/Mr-zyh/p/5447595.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!