1、iOS沙盒

iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。

1.1、每个应用程序都有自己的存储空间

 1.2、应用程序不能翻过自己的围墙去访问别的存储空间的内容

 1.3、应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行。

2、打开模拟器沙盒目录

下面看看模拟器的沙盒文件夹在mac电脑上的什么位置。

文件都在个人用户名文件夹下的一个隐藏文件夹里,中文叫资源库,他的目录其实是Library。

2.1 方法1、可以设置显示隐藏文件,然后在Finder下直接打开。设置查看隐藏文件的方法如下:打开终端,输入命名

显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true

隐藏Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false

输完单击Enter键,退出终端,重新启动Finder就可以了

重启Finder:鼠标单击窗口左上角的苹果标志-->强制退出-->Finder-->

打开资源库后找到/Application Support/iPhone Simulator/文件夹。这里面就是模拟器的各个程序的沙盒目录

2.2 方法2、这种方法更方便,在Finder上点->前往->前往文件夹,输入/Users/username/Library/Application Support/iPhone Simulator/  前往。

username这里写你的用户名。

3、目录结构

  • 默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp。因为应用的沙盒机制,应用只能在几个目录下读写文件

    Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录
  • tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录
  • Library/Caches:保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的非重要数据
  • Library/Preference:保存应用的所有偏好设置,iOS的Settings(设置)应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录

二、获取主要目录路径的方式

1、沙盒目录

NSLog(@"%@",NSHomeDirectory()); 

输出结果:

/var/mobile/Applications/326640A7-6E27-4C63-BA5E-7391F203659A

1.tmp

NSLog(@"%@",NSTemporaryDirectory());  

输出结果:

/private/var/mobile/Applications/326640A7-6E27-4C63-BA5E-7391F203659A/tmp/

2.Myapp.app

NSLog(@"%@",[[NSBundle mainBundle] bundlePath]);

输出结果:

/var/mobile/Applications/326640A7-6E27-4C63-BA5E-7391F203659A/PhoneCall.app  

3.Documents

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  

NSString *path = [paths objectAtIndex:0];  

或者写成: NSString *path = [paths lastObject]; 

//documentDirectory只有一个元素所以取第一个元素根最后一个元素是一样的。 

NSLog(@"%@",path);  

输出结果:

/var/mobile/Applications/326640A7-6E27-4C63-BA5E-7391F203659A/Documents

注:这里用到的NSSearchPathForDirectoriesInDomains方法需要解释下,其声明如下:

FOUNDATION_EXPORT NSArray *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde);

该方法用于返回指定范围内的指定名称的目录的路径集合。有三个参数:

  • directory

NSSearchPathDirectory类型的enum值,表明我们要搜索的目录名称,比如这里用NSDocumentDirectory表明我们要搜索的是Documents目录。如果我们将其换成NSCachesDirectory就表示我们搜索的是Library/Caches目录。

  • domainMask

NSSearchPathDomainMask类型的enum值,指定搜索范围,这里的NSUserDomainMask表示搜索的范围限制于当前应用的沙盒目录。还可以写成NSLocalDomainMask(表示/Library)、NSNetworkDomainMask(表示/Network)等。

  • expandTilde

BOOL值,(YES: /User/userName. NO: ~)表示是否展开波浪线~。我们知道在iOS中~的全写形式是/User/userName,该值为YES即表示写成全写形式,为NO就表示直接写成“~” 。

三、NSFileManager的一些相关操作:

1)创建文件夹:

 NSString *myDirectory = [documentDirectory stringByAppendingPathComponent:@"test"];

     BOOL ok = [fileManage createDirectoryAtPath:myDirectory withIntermediateDirectories:YES attributes:nil error:&error];

2)取得一个目录下得所有文件名:(如上面的myDirectory)可用

NSArray *file = [fileManager subpathsOfDirectoryAtPath: myDirectory error:nil];

或

NSArray *files = [fileManager subpathsAtPath: myDirectory ];

或

NSArray *files=[fileManager  contentsOfDirectoryAtPath:documentDirectory error:&error];



3)读取某个文件:

NSData *data = [fileManger contentsAtPath:myFilePath];//myFilePath是包含完整路径的文件名

或直接用NSData 的类方法:

NSData *data = [NSData dataWithContentOfPath:myFilePath];




4)保存某个文件:

可以用 NSFileManager的

- (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr;

或 NSData 的

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;

- (BOOL)writeToFile:(NSString *)path options:(NSUInteger)writeOptionsMask error:(NSError **)errorPtr;



5)字符串写入文件:

[str writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];

[NSString stringWithContentsOfFile...];



6)移动文件:

if ([fileMgr moveItemAtPath:filePath toPath:filePath2 error:&error] != YES)



7)删除文件:

if ([fileMgr removeItemAtPath:filePath2 error:&error] != YES)



8)判断是否是文件夹:

BOOL isDir = NO;

[fileManager fileExistsAtPath:path isDirectory:(&isDir)];

 if (isDir) { ...}



9)以下代码用于获取本机上的文件资源或图片

获取文本:

NSFileManager *fileManager=[NSFileManager defaultManager];

NSData *data=[fileManager contentsAtPath:@"/Developer/Documentation/wxWidgets/docs/lgpl.txt"];

NSString *string=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"%@",string);

获取图片:

NSData *myData=[fileManager contentsAtPath:@"/Users/ruby/Desktop/Photo1.jpg"];

UIImage *myImage=[UIImage imageWithData:myData];


imageView.image=myImage;

iOS学习之沙盒的更多相关文章

  1. IOS中的沙盒机制

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

  2. IOS开发-UI学习-沙盒机制&文件操作

    ž苹果为软件的运行提供了一个沙盒机制 每个沙盒含有3个文件夹:Documents, Library 和 tmp.因为应用的沙盒机制,应用只能在几个目录下读写文件 žDocuments:苹果建议将程序中 ...

  3. iOS NSFileManager对沙盒文件及目录添加删除操作

    iOS 使用 NSFileManager对沙盒里面的文件和目录,增加,修改,删除操作: - (void)viewDidLoad { [super viewDidLoad]; self.title = ...

  4. iOS初级数据持久化 沙盒机制 归档与反归档

    数据持久化就是数据保存成文件,存储到程序中的沙盒中. 沙盒构成 Document 存储用户数据,需要备份的信息 Caches 缓存文件, 程序专用的支持文件 Temp 临时文件 通过代码查找程序沙盒的 ...

  5. iOS开发之--沙盒的操作

    iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory ...

  6. 【iOS知识学习】_iOS沙盒机制

    IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序仅仅能在为该应用创建的目录内读取文件,不能够訪问其它地方的内容.全部的非代码文件都保存在这个地方.比方图片.声音.属性列表和文本文件 ...

  7. iOS路径沙盒文件管理(转载)

    iOS路径沙盒文件管理,看到博主总结的很好,转载过来,原文:http://www.aichengxu.com/view/35264 一.iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文 ...

  8. iOS--浅谈iOS沙盒目录

    原文地址:http://blog.csdn.net/wzzvictory/article/details/18269713 出于安全考虑,iOS系统的沙盒机制规定每个应用都只能访问当前沙盒目录下面的文 ...

  9. iOS 沙盒(sandbox)结构 使用 实例

    声明:该文档是经过自己查找网上的资料以及自己多年的经验后而总结出来的,希望对大家有所帮助,有什么不恰当支出还请大家多指点! iOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为 ...

随机推荐

  1. C# XmlSerializer实现序列化浅析

    C# XmlSerializer类是实现序列化的一个类,那么关于C# XmlSerializer的学习我们要掌握怎么样的操作方法呢?那么这里向你详细介绍具体的操作细节情况. C# XmlSeriali ...

  2. 基于webrtc的视频通话时webrtc的接口调用流程

    场景: 1.A call B 2.B answer 3.A connected with B 共同的步骤: A 和 B 都需要初始化webrtc模块,创建peerconnectionfactory 步 ...

  3. Hadoop 2.4.x集群安装配置问题总结

    配置文件:/etc/profile export JAVA_HOME=/usr/java/latest export HADOOP_PREFIX=/opt/hadoop-2.4.1 export HA ...

  4. Writing Text Files On The Client in Oracle Forms 10g

    Below is the example to write file on client in Oracle Forms 10g with webutil library package.Note:  ...

  5. 在代码中调用gdb

    转载:http://blog.csdn.net/hanchaoman/article/details/5583457 在SIGSEGV的handler中调用gdb, 命令gdb [exec file] ...

  6. XDocument 获取包括第一行的声明(版本、编码)的所有节点

    XDocument保存为xml文件的方法如下: XDocument doc = new XDocument( new XDeclaration("1.0","UTF-8& ...

  7. CSS布局基础之二认识Viewport

    什么是viewport viewport,等同于浏览器窗口. 功能:约束你网站中最顶级包含块(containing block)元素html标签. 什么是包含块(containing block)?下 ...

  8. [bzoj1103][POI2007]大都市meg(树状数组+dfs序)

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2031  Solved: 1069[Submit][Sta ...

  9. 翻译:打造基于Sublime Text 3的全能python开发环境

    原文地址:https://realpython.com/blog/python/setting-up-sublime-text-3-for-full-stack-python-development/ ...

  10. linux 知识汇总

    1 ) linux下文件系统类型的学习 2 )深入理解linux i节点(inode) 3 )RAID系列