zoukankan      html  css  js  c++  java
  • IOS 沙盒机制 浅析

    IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容。所有的非代码文件都保存在这个地方,比如图片、声音、属性列表和文本文件等。

    1.每个应用程序都在自己的沙盒内(提示:在IOS8中已经开放访问)

    2.不能随意跨越自己的沙盒去访问别的应用程序沙盒的内容

    3.应用程序向外请求或接收数据都需要经过权限认证

    复制代码
    //获取home目录
        NSString *homePath = NSHomeDirectory();
        NSLog(@"home%@",homePath);
       
        //获取documents目录
        //方式1:
        NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsPath = [documents lastObject];
        NSLog(@"%@",documentsPath);
        //方式2:拼接字符串
        NSString *documentPath2 = [homePath stringByAppendingPathComponent:@"Documents"];
        NSLog(@"documenPath2:%@",documentPath2);
       
        //获取caches缓存目录
        NSArray *caches = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
        NSString *cachesPath = [caches lastObject];
        NSLog(@"cachesPath:%@",cachesPath);
       
        //获取临时目录
        NSString *tmp = NSTemporaryDirectory();
        NSLog(@"tmp:%@",tmp);
       
        //在documents目录下创建文件
        NSFileManager *fm = [NSFileManager defaultManager];
        NSString *fileName = [documentsPath stringByAppendingPathComponent:@"1.txt"];
        NSString *str = @"hello world";
        NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
       
        if ([fm createFileAtPath:fileName contents:data attributes:nil]) {
            NSLog(@"file create successful");
        }
       
        //读出文件的内容
        NSError *error = nil;
       
        NSString *str2 = [NSString stringWithContentsOfFile:fileName encoding:NSUTF8StringEncoding error:&error];
        if (!error) {
            NSLog(@"str2:%@",str2);
        }
        else
        {
            NSLog(@"%@",error);
        }
        //NSBundle对象:图片、xib、storyBoard、plist文件都是放在应用程序包中
        NSBundle *bundle = [NSBundle mainBundle];
        //获取包中文件的路径;
        NSString *path = [bundle pathForResource:@"array" ofType:@"plist"];
        //加载包中的xib文件
        NSArray *views  = [bundle loadNibNamed:@"cell" owner:self options:nil];
    复制代码
    用户偏好设置
    练习:
    复制代码
    NSUserDefaults *userDeafults = [NSUserDefaults standardUserDefaults];
       
        [userDeafults setObject:@"admin" forKey:@"userName"];
        [userDeafults setObject:[NSDate date] forKey:@"loginDate"];
        [userDeafults setInteger:2 forKey:@"loginTimes"];
       
        //将偏好设置写到文件中去
        [userDeafults synchronize];//同步方法
       
        //获取home目录
        NSString *homePath = NSHomeDirectory();
        NSLog(@"%@",homePath);
     
     NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
        NSString *userName = [userDefaults objectForKey:@"userName"];
        NSDate *loginDate = [userDefaults objectForKey:@"loginDate"];
        NSString *loginTimes = [userDefaults objectForKey:@"loginTimes"];
        NSLog(@"%@,%@",userName,loginTimes);
        NSDateFormatter *df = [[NSDateFormatter alloc]init];
        df.dateFormat = @"MM-dd HH-mm-ss";
        NSLog(@"loginDate:%@",[df stringFromDate:loginDate]);
    复制代码
    注意:UserDefaults设置数据时,不是立即写入,而是根据时间戳定时地把缓存中的数据写入本地磁盘。所以调用了set方法之后数据有可能还没有写入磁盘,应用程序就终止了。
    出现以上问题,可以通过调用synchornize方法强制写入:
    [defaults synchronize];

    三、应用沙盒结构分析

    应⽤程序包:(上图中的Layer)包含了所有的资源文件和可执行文件 

    Documents:保存应⽤运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录

    tmp:保存应⽤运行时所需的临时数据,使⽤完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时 不会备份该目录 

    Library/Caches:保存应用运行时⽣成的需要持久化的数据,iTunes同步设备时不会备份该目录。⼀一般存储体积大、不需要备份的非重要数据 

    Library/Preference:保存应用的所有偏好设置,iOS的Settings(设置) 应⽤会在该⺫录中查找应⽤的设置信息。iTunes同步设备时会备份该目录
    *参考了别人的请见谅(都是知识点,偷了一下懒)*
  • 相关阅读:
    非空约束
    leetcode208
    leetcode207
    leetcode395
    leetcode116
    leetcode105
    leetcode131
    leetcode73
    leetcode200
    leetcode17
  • 原文地址:https://www.cnblogs.com/wuyuxin/p/7045615.html
Copyright © 2011-2022 走看看