zoukankan      html  css  js  c++  java
  • iOS - 沙盒机制(SandBox)和获取沙盒路径

    iOSAPP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒。每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URLScheme。沙盒里面的文件可以是照片、声音文件、文本、属性列表等。

    沙盒机制简介

    沙盒简述:

    1,每一个APP都有一个存储空间,就是沙盒。
    
    2,APP之间不能相互通信。
    
    3,沙盒根目录结构:Documents、Library、temp。

    简述一下Documents、Library、temp的区别:

    1,Documents:用于存储用户数据,iTunes备份和恢复的时候会包括此目录,所以,苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下。
    
    2,Library:包含两个子目录:Caches和Preferences。Caches用来存放用户需要换成的文件。Preferences是APP的偏好设置,可以通过NSUserDefaults来读取和设置。
    
    3,tmp:用于存放临时文件,这个可以放一些当APP退出后不再需要的文件。

    打开模拟器沙盒方法

    方法一:前往文件夹打开

    /Users/ligang/Library/Application Support/iPhone Simulator/

    直接在Finder->前往->前往文件夹,输入上面的内容即可。记住将ligang换成你的电脑用户名。

    方法二:通过Finder一步步查找

    模拟器上的APP的沙盒实在用户目录下的资源库里面,但是资源库是隐藏文件夹。所以查看沙盒之前,现将隐藏文件夹显示出来。显示隐藏文件的命令:

    defaults write com.apple.finder AppleShowAllFiles -bool true

    用心的童鞋会发现,隐藏隐藏文件的命令:

    defaults write com.apple.finder AppleShowAllFiles -bool false

    如何获取Documents、Library、tmp的路径?

    获取沙盒根目录

    获取沙盒根目录,直接调用NSHomeDirectory():

    //获取沙盒根目录
    
    NSString*directory=NSHomeDirectory();
    
    NSLog(@"directory:%@",directory);
    
    控制台输出:  
    
    2017-05-10 09:23:57.708447+0800 VideoClip[408:70903] directory:/var/mobile/Containers/Data/Application/CC60BE19-540C-43BE-9F9C-293A2A630C9C

    这个是真机的路径,大家有时间的话可以看看模拟器的根目录路径。

    获取Documents路径

    获取Documents路径如下:

    //获取Documents路径
    
    NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    
    NSString*path=[pathsobjectAtIndex:0];
    
    NSLog(@"path:%@",path);
    
    控制台输出:    
    
    2017-05-10 09:23:57.708754+0800 VideoClip[408:70903] path:/var/mobile/Containers/Data/Application/Documents
    
    获取Documents文件夹目录,第一个参数是说明获取Doucments文件夹目录,第二个参数说明是在当前应用沙盒中获取。  

    获取Library路径

    //获取Library路径
    
    NSArray*paths=NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES);
    
    NSString*path=[pathsobjectAtIndex:0];
    
    NSLog(@"path:%@",path);
    
    控制台输出:  
    
    2017-05-10 09:23:57.708754+0800 VideoClip[408:70903] path:/var/mobile/Containers/Data/Application/Library

    获取Caches路径

    //获取Caches路径
    
    NSArray*paths=NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
    
    NSString*path=[pathsobjectAtIndex:0];
    
    NSLog(@"path:%@",path);
    
    控制台输出:  
    
    2017-05-10 09:23:57.708754+0800 VideoClip[408:70903] path:/var/mobile/Containers/Data/Application/Library/Caches

    获取tmp路径

    NSString*tmp=NSTemporaryDirectory();
    
    NSLog(@"tmp:%@",tmp);
    
    控制台输出:  
    
    2017-05-10 09:23:57.709190+0800 VideoClip[408:70903] tmp:/private/var/mobile/Containers/Data/Application/CC60BE19-540C-43BE-9F9C-293A2A630C9C/tmp/

    以上是iOS开发中获取沙盒路径的方法。

     

     

     

    iOS 简单的存储和读取 本地图片 适用于 用户头像

    //存储图片到本地沙盒
    + (void)saveImage:(UIImage *)image{
        NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndexWithCheck:0];
        NSString *imageName = [NSString stringWithFormat:@"%@HeadImage",[USERDEFAULT objectForKey:USERNAME]];
        NSString *filePath = [[documentDirectory stringByAppendingPathComponent:@"HeadImages"] stringByAppendingString:imageName];
        NSData *data = UIImageJPEGRepresentation(image, 0.1);
        [data writeToFile:filePath atomically:YES];
    }
    //获取本地沙盒存储的图片
    + (UIImage *)loadImage{
        NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndexWithCheck:0];
        NSString *imageName = [NSString stringWithFormat:@"%@HeadImage",[USERDEFAULT objectForKey:USERNAME]];
        NSString *filePath = [[documentDirectory stringByAppendingPathComponent:@"HeadImages"] stringByAppendingString:imageName];
        NSFileManager *fm = [NSFileManager defaultManager];
        if ([fm fileExistsAtPath:filePath]) {
            NSData * data = [NSData dataWithContentsOfFile:filePath];
            UIImage *image = [UIImage imageWithData:data];
            return image;
        }
        return nil;
    }
  • 相关阅读:
    在页面跳转的时候,在跳转后的页面中使用js 获取到 页面跳转的url中携带的参数。
    使用js处理后台返回的Date类型的数据
    java后端时间处理工具类,返回 "XXX 前" 的字符串
    前端分页神器,jquery grid的使用(前后端联调),让分页变得更简单。
    后端分页神器,mybatis pagehelper 在SSM与springboot项目中的使用
    使用SSM 或者 springboot +mybatis时,对数据库的认证信息(用户名,密码)进行加密。
    swagger2 常用注解的使用
    SSM项目 以及 springboot 中引入swagger2的方法
    jquery grid 获取选中的行的数据,以及获取所有行的方法
    关于使用ssm与spring时,配置tomcat 虚拟目录( doBase )中的一些坑
  • 原文地址:https://www.cnblogs.com/gongyuhonglou/p/6834352.html
Copyright © 2011-2022 走看看