码迷,mamicode.com
首页 > 其他好文 > 详细

沙盒机制

时间:2015-07-25 19:44:51      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

一、概述

   1.IOS中的沙盒机制(SandBox)是一种安全体系,沙盒的本质就是一个文件夹,名字是通过UUID符分配,它包含了三个文件Document文件夹、Library文件夹、tmp文件夹,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容。所有的非代码文件都保存在这个地方,比如图片、声音、属性列表、数据库文件、文本文件等。

 

  2.应用程序沙盒的作用:

    (1)每个应用程序都在自己的沙盒内

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

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

 

  3.应用沙盒地址的变更
 
      在Xcode5及之前的版本中,沙盒地址为如下:/Users/username/Library/Application Support/iP hone  Simulator/7.0.3/Applications,在Applications文加下,会找到应用程序的沙盒。 
       在打开应用沙盒后,会有应用程序文件、Document文件夹、Library文件夹、tmp文件夹。至于这几个文件夹的作用不在此做赘述。 

技术分享

 

       在Xcode6中,应用程序文件、Document文件夹、Library文件夹、tmp文件夹这四个文件放在了不同的目录中。
   应用程序文件路径:/Users/username/Library/Developer/CoreSimulator/Devices/模拟器UDID/data/Containers/Bundle/,Application文件夹下
技术分享
  Document文件夹、Library文件夹、tmp文件夹路径:/Users/username/Library/Developer/CoreSimulator/Devices/模拟器UDID/data/Containers/Data/,Application文件下。

技术分享

  提示:但是不幸的是,这两个路径打开后的文件名,还是经过UUID符编码过的

 

  4.沙盒中各个文件的作用

    (1)Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录

    (2)Library:存储程序的默认设置或其它状态信息;

    (3)Library/Caches:存放缓存文件,如视频,音乐等,iTunes不会备份此目录,此目录下文件不会在应用退出删除

    (4)Library/Preferences:存放的是通过NSUserDefault创建的.plist文件,NSUserDefault是iOS提供的本地化数据存储方式,会在沙盒中自动创建一个.plist的配置文件,将数据保存起来,在读取时,以NSDictionary字典来进行接收 

    (5)tmp:用于存储临时文件,比如:下载的zip包,解压后的再删除

  注意:iTunes在与iPhone同步时,备份所有的Documents和Library文件,iPhone在重启时,会丢弃所有的tmp文件。

 

  5.bundle

    生成 iOS 应用程序时,Xcode 将它捆绑成一个包。捆绑包 (bundle) 是文件系统中的一个目录,它将相关资源成组在一个地方。一个 iOS 应用程序捆绑包中,含有其可执行代码和支持资源文件(如应用程序图标、工程中添加的图片、创建的.plist文件和已本地化的内容)。

    

技术分享技术分享

    注意:沙箱的概念和bundle没直接关系,沙箱只是说明程序资源与外界隔离,IOS8以后.app的包不存在于沙盒中了。

 

二、用法

  

     //获取根目录  
        NSString *homePath = NSHomeDirectory();  
        NSLog(@"Home目录:%@",homePath);  
          
        //获取Documents文件夹目录,第一个参数是说明获取Doucments文件夹目录,第二个参数说明是在当前应用沙盒中获取,所有应用沙盒目录组成一个数组结构的数据存放  
        NSArray *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);  
        NSString *documentsPath = [docPath objectAtIndex:0];  
        NSLog(@"Documents目录:%@",documentsPath);  
          
        //获取Cache目录  
        NSArray *cacPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);  
        NSString *cachePath = [cacPath objectAtIndex:0];  
        NSLog(@"Cache目录:%@",cachePath);  
          
        //Library目录  
        NSArray *libsPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);  
        NSString *libPath = [libsPath objectAtIndex:0];  
        NSLog(@"Library目录:%@",libPath);  
          
        //temp目录  
        NSString *tempPath = NSTemporaryDirectory();  
        NSLog(@"temp目录:%@",tempPath);
2015-07-22 22:50:45.869 测试沙盒路径[54790:2500260] Home目录:/Users/songshuhao/Library/Developer/CoreSimulator/Devices/6E660574-CD5D-43E4-BB4E-126B04CC0B79/data/Containers/Data/Application/4C911A78-52BA-4A5E-943D-A09B5DD0A267
2015-07-22 22:50:45.870 测试沙盒路径[54790:2500260] Documents目录:/Users/songshuhao/Library/Developer/CoreSimulator/Devices/6E660574-CD5D-43E4-BB4E-126B04CC0B79/data/Containers/Data/Application/4C911A78-52BA-4A5E-943D-A09B5DD0A267/Documents
2015-07-22 22:50:45.870 测试沙盒路径[54790:2500260] Cache目录:/Users/songshuhao/Library/Developer/CoreSimulator/Devices/6E660574-CD5D-43E4-BB4E-126B04CC0B79/data/Containers/Data/Application/4C911A78-52BA-4A5E-943D-A09B5DD0A267/Library/Caches
2015-07-22 22:50:45.870 测试沙盒路径[54790:2500260] Library目录:/Users/songshuhao/Library/Developer/CoreSimulator/Devices/6E660574-CD5D-43E4-BB4E-126B04CC0B79/data/Containers/Data/Application/4C911A78-52BA-4A5E-943D-A09B5DD0A267/Library
2015-07-22 22:50:45.871 测试沙盒路径[54790:2500260] temp目录:/Users/songshuhao/Library/Developer/CoreSimulator/Devices/6E660574-CD5D-43E4-BB4E-126B04CC0B79/data/Containers/Data/Application/4C911A78-52BA-4A5E-943D-A09B5DD0A267/tmp/

 

沙盒机制

标签:

原文地址:http://www.cnblogs.com/songshuhaoNB/p/4667479.html

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