1、IOS沙盒机制IOS应用程序只能在本应用程序中创建的文不可被成为沙盒,所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。1.1、每个应用程序都有自己的存储空间1.2、应用程序不能翻过自己的围墙去访问别的存储空间的内容1.3、应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行。通过这张图只能从表层上理解sandbox是一种安全体系,应用程序的所有操作都要通过这个体系来执行,其中核心内容是:sandbox对应用程序执行各种操作的权限限制。2、打开模拟器沙盒目录下面看看模拟器的沙盒文件夹在mac电脑上的什么位置。文件都在个人用户名文件夹下的一个隐藏文件夹里,中文叫资源库,英文名是Library。下面介绍一种简单方法前往该文件夹:在Finder上点->前往->前往文件夹进入模拟器后,里面就包含了各个应用程序的沙盒。进入一个应用程序,如下图,就是一个沙箱了。下面介绍一下沙箱的目录结构:默认情况下,每个沙盒含有3个文件夹:Documents,Library和tmp和一个应用程序文件(也是一个文件)。因为应用的沙盒机制,应用只能在几个目录下读写文件Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录Library:存储程序的默认设置或其它状态信息;Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除tmp:提供一个即时创建临时文件的地方。iTunes在与iPhone同步时,备份所有的Documents和Library文件。iPhone在重启时,会丢弃所有的tmp文件。注意:这里很容易和bundle混淆在一起,下面根据自己的一点理解说明二者的区别:bundle:生成iOS应用程序时,Xcode将它捆绑成一个包。捆绑包(bundle)是文件系统中的一个目录,它将相关资源成组在一个地方。一个iOS应用程序捆绑包中,含有其可执行文件和支持资源文件(如应用程序图标、图像文件和已本地化的内容)。Abundle(包裹、捆、束)isadirectorywithastandardizedhierarchicalstructurethatholdsexecutablecodeandtheresourcesusedbythatcode.所以可以将整个应用程序其实就可以看做一个bundle。沙箱的概念和bundle没直接关系,沙箱只是说明程序资源与外界隔离下面通过一个简单的例子说明一下bundle和sandbox。//新建的plist文件是在应用程序中的,可以通过bundle存取到该文件NSString*plistPath=[[NSBundlemainBundle]pathForResource:@"MyPlist"ofType:@"plist"];NSMutableArray*array=[NSMutableArrayarrayWithContentsOfFile:plistPath];//向数组中新添加一个项目[arrayaddObject:@"3"];//重新写回plist文件中BOOLvalue=[arraywriteToFile:plistPathatomically:YES];if(value){NSMutableArray*newArray=[NSMutableArrayarrayWithContentsOfFile:plistPath];NSLog(@"newarray=%@",newArray);}/*输出:newarray=(0,1,2,3)*///获取沙箱中document的pathNSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);NSString*documentsDirectory=[pathsobjectAtIndex:0];NSString*newPath=[documentsDirectorystringByAppendingPathComponent:@"data.plist"];//将数组写入到沙箱的document中的data.plist文件中[arraywriteToFile:newPathatomically:YES];NSMutableArray*arr=[[NSMutableArrayalloc]initWithContentsOfFile:newPath];NSLog(@"arrayindata.plist=%@",arr);/*输出:arrayindata.plist=(0,1,2,3)*/说明:我们首先在项目中新建一个plist文件(root项的类型为数组),添加了3个元素。因为新建的plist文件是在应用程序中的,我们可以通过bundle获取到这个plist文件,读取出这个数组,添加一个数据元素后,重新写回plist文件中�

��接着我们获取沙箱document的path,然后将这个文件写入到沙箱中的data.plist文件中(如果不存在,会自动新建一个的),然后再从data.plist读取出这个数组。关于新建的MyPlist.plist文件,我们写回文件的数组中添加了一项新的元素,但是我们在xcode中查看这个MyPlist.plist文件时,发现并没有显示出新增的数组元素,但是我们到沙箱中查看就可以看到了,这个估计是xoode本身的问题。关于document中data.plist文件查看我们也可以到沙箱中进行查看。如下图:3、获取沙盒目录://1、获取程序的Home目录NSString*homeDirectory=NSHomeDirectory();NSLog(@"path:%@",homeDirectory);//path:/Users/ios/Library/ApplicationSupport/iPhoneSimulator/6.1/Applications/BF38C9E3-1A4A-4929-B5F2-3E46E41CC671//2、获取document目录NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);NSString*path=[pathsobjectAtIndex:0];NSLog(@"path:%@",path);//path:/Users/ios/Library/ApplicationSupport/iPhoneSimulator/6.1/Applications/BF38C9E3-1A4A-4929-B5F2-3E46E41CC671/Documents//3、获取Cache目录NSArray*paths=NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);NSString*path=[pathsobjectAtIndex:0];NSLog(@"path:%@",path);//path:/Users/ios/Library/ApplicationSupport/iPhoneSimulator/6.1/Applications/BF38C9E3-1A4A-4929-B5F2-3E46E41CC671/Library/Caches//4、获取Library目录NSArray*paths=NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES);NSString*path=[pathsobjectAtIndex:0];NSLog(@"path:%@",path);//path:/Users/ios/Library/ApplicationSupport/iPhoneSimulator/6.1/Applications/BF38C9E3-1A4A-4929-B5F2-3E46E41CC671/Library//5、获取tmp目录NSString*tmpDir=NSTemporaryDirectory();NSLog(@"path:%@",tmpDir);//path:/Users/ios/Library/ApplicationSupport/iPhoneSimulator/6.1/Applications/BF38C9E3-1A4A-4929-B5F2-3E46E41CC671/tmp/4、文件操作之NSFileManager4.1、在document中创建一个文件目录NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);NSString*documentsDirectory=[pathsobjectAtIndex:0];NSLog(@"documentsDirectory%@",documentsDirectory);NSFileManager*fileManager=[NSFileManagerdefaultManager];NSString*testDirectory=[documentsDirectorystringByAppendingPathComponent:@"test"];//创建目录[fileManagercreateDirectoryAtPath:testDirectorywithIntermediateDirectories:YESattributes:nilerror:nil];4.2、在test目录下创建文件创建文件怎么办呢?接着上面的代码testPath要用stringByAppendingPathComponent拼接上你要生成的文件名,比如test11.txt。这样才能在test目录下写入文件。testDirectory是上面代码生成的路径哦,不要忘了。我往test文件夹里写入三个文件,test11.txt,test22.txt,text.33.txt。内容都是写入内容,writeString。实现代码如下:NSString*testPath1=[testDirectorystringByAppendingPathComponent:@"test1.txt"];NSString*testPath2=[testDirectorystringByAppendingPathComponent:@"test2.txt"];NSString*testPath3=[testDirectorystringByAppendingPathComponent:@"test3.txt"];NSString*string=@"写入内容,writeString";[fileManagercreateFileAtPath:testPath1contents:[stringdataUsingEncoding:NSUTF8StringEncoding]attributes:nil];[fileManagercreateFileAtPath:testPath2contents:[stringdataUsingEncoding:NSUTF8StringEncoding]attributes:nil];[fileManagercreateFileAtPath:testPath3contents:[stringdataUsingEncoding:NSUTF8StringEncoding]attributes:nil];4.3获取目录列里所有文件名两种方法获取:subpathsOfDirectoryAtPath和subpathsAtPathNSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);NSString*documentsDirectory=[pathsobjectAtIndex:0];NSLog(@"documentsDirectory%@",documentsDirectory);NSFileManager*fileManage=[NSFileManagerdefaultManager];NSString*myDirectory=[documentsDirectorystringByAppendingPa

thComponent:@"test"];//方法一NSArray*file=[fileManagesubpathsOfDirectoryAtPath:myDirectoryerror:nil];NSLog(@"%@",file);//方法二NSArray*files=[fileManagesubpathsAtPath:myDirectory];NSLog(@"%@",files);获取刚才test目录下的所以文件名:两种方法都是输出("test1.txt","test2.txt","test3.txt")4.4、fileManager使用操作当前目录//创建文件管理器NSFileManager*fileManager=[NSFileManagerdefaultManager];NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);NSString*documentsDirectory=[pathsobjectAtIndex:0];//更改到待操作的目录下[fileManagerchangeCurrentDirectoryPath:[documentsDirectorystringByExpandingTildeInPath]];//创建文件fileName文件名称,contents文件的内容,如果开始没有内容可以设置为nil,attributes文件的属性,初始为nilNSString*fileName=@"testFileNSFileManager.txt";NSArray*array=[[NSArrayalloc]initWithObjects:@"helloworld",@"helloworld1",@"helloworld2",nil];//下面是将数组类型转换为NSData类型NSMutableData*data=[[NSMutableDataalloc]init];for(inti=0;i<[arraycount];++i){NSString*str=[arrayobjectAtIndex:i];NSData*temp=[strdataUsingEncoding:NSUTF8StringEncoding];[dataappendData:temp];}//注意contents参数的类型是NSData类型[fileManagercreateFileAtPath:fileNamecontents:dataattributes:nil];4.5删除文件接着上面的代码就可以将刚新建的testFileNSFileManager.txt文件删除![fileManagerremoveItemAtPath:fileNameerror:nil];4.6混合数据的读写请参看原文最后面的内容。

阅读全文 >

ios沙箱模式开启_ios的应用沙箱运行是怎么一回事相关推荐

  1. ios沙箱模式开启_iOS的沙箱机制 是否应该清理后台

    在这里不讨论iOS的封闭性,这些是手机厂商.应用程序开发者需要深入了解的,下面讨论的是iOS的沙箱机制,来了解它对我们个人用户所产生影响 什么是沙箱机制? ​ 每个APP都有自己的独立存储空间,安装的 ...

  2. ios沙箱模式开启_iOS沙盒篇

    iOS系统在安全性上的一大亮点就是沙盒. 每个iOS应用SDK都被限制在沙盒中,我们可以把沙盒当成一个设置了仅当前SDK可以访问的文件夹,苹果对沙盒有以下几条限制: 应用程序可以在自己的沙盒中运行,但 ...

  3. ios沙箱模式开启_iOS我眼中的沙盒机制

    一.简介 1.1 概念:每个iOS应用都有自己的应用沙盒,应用沙盒就是文件系统目录. 1.2 核心:sandbox对应用程序执行各种操作的权限限制 . 1.3 特点: 每个应用程序的活动范围都限定在自 ...

  4. ios沙箱模式开启_IOS沙盒基本机制(sandbox)

    释放双眼,带上耳机,听听看~! iOS系统相对于Android(或Windows)系统来说比较安全的原因有很多,其中有一点就是苹果推出的沙盒机制,每个应用都有自己对应的沙盒,每个应用程序之间不能相互访 ...

  5. ios沙箱模式开启_iOS沙盒(sandBox)机制总结

    写在前面: iOS沙盒机制, 随便百度一下就有很多很多文章, 这篇也没什么新的东西. 只是看千篇文章都不如自己总结一次来得记忆深刻. 1. iOS沙盒机制介绍 iOS应用程序只能在为该改程序创建的文件 ...

  6. ios沙箱模式开启_iOS沙盒详细介绍

    沙盒机制介绍 iOS中的沙盒机制是一种安全体系.为了保证系统安全,iOS每个应用程序在安装时,会创建属于自己的沙盒文件(存储空间).应用程序只能访问自身的沙盒文件,不能访问其他应用程序的沙盒文件,当应 ...

  7. ios沙箱模式开启_【iOS】苹果IAP(内购)中沙盒账号使用注意事项

    目标 沙盒账号的正确使用方式 沙盒账号使用的注意事项 1.沙盒账号是什么 iOS应用里面用到了苹果应用内付费(IAP)功能,在项目上线前一定要进行功能测试.测试肯定是需要的,何况这个跟money有关. ...

  8. iOS静音模式开启视频声音

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessi ...

  9. java沙盒模式_JavaScript学习笔记(二十五) 沙箱模式

    沙箱模式(Sandbox Pattern) 沙箱模式可以避免命名空间的一些缺点(namespacing pattern),比如: 依赖一个唯一全局的变量作为程序的全局符号.在命名空间模式中,没有办法存 ...

最新文章

  1. pytorch系列 -- 9 pytorch nn.init 中实现的初始化函数 uniform, normal, const, Xavier, He initialization...
  2. Vue踩坑之旅(一)—— 数组、对象的监听
  3. 使用docker中mysql镜像
  4. python爬虫之基于scrapy_redis的分布式爬虫
  5. 在项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果?
  6. SAP专家通过调试的方式解决过的SAP UI5问题列表
  7. ngRx 官方示例分析 - 4.pages
  8. 查看Scala编译的.class文件
  9. STM32----SysTick实现监控开机时长
  10. 【从0到1,搭建Spring Boot+RESTful API+Shiro+Mybatis+SQLServer权限系统】05、Shiro集成
  11. 用户 'NT AUTHORITY\NETWORK SERVICE' 登录失败问题
  12. Java 函数引用 替代方案
  13. MySQL JOIN连接用法
  14. 新中大财务软件服务器路径修改,新中大软件最常用的操作手册
  15. java applet介绍,Java Applet 介绍
  16. 计算机基础知识进制的转换,计算机基础之各进制间的相互转换
  17. python-django前端传递数据的三种格式_CBV源码分析_django模板语法
  18. 汾阳哪里有计算机培训班,汾阳市2020年第六期 吕梁山护工培训班开班
  19. 百度、微博的大数据算法Top10热搜怎么实现?
  20. Internet Download Manager v6.41.3中文特别版IDM下载器免费下载

热门文章

  1. 时间序列深度学习:状态 LSTM 模型预测太阳黑子
  2. LR中URL方式录制和基于HTML录制脚本(转)
  3. 七夕节快到了,做个图钉画以及学习下Pillow吧
  4. 此生不戒多巴胺-冲刺日志(第七天)
  5. “can't find a register in class 'CREG' while reloading 'asm'”错误
  6. Chrome 浏览器安装Vue2、Vue3插件方法 (详细有效)
  7. 绘制渐变色扇形图 -基于python - matplotlib 颜色地图plt.cm模块儿
  8. Word取消默认文档只读
  9. Orthogonal Matrix Integration
  10. Halcon视觉实战例程之矩形边缘距离测量