写在前面:
iOS沙盒机制, 随便百度一下就有很多很多文章, 这篇也没什么新的东西. 只是看千篇文章都不如自己总结一次来得记忆深刻.
1. iOS沙盒机制介绍
iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒;
所有的非代码文件都要保存在沙盒中,例如图像,图标,声音,映像,属性列表,文本文件等;
2. 沙盒文件夹目录结构
iOS每个应用程序都有自己的三个目录(Document,Library,tmp),他们之间不能相互访问;
/MyApp.app:
①存放内容
该目录包含了应用程序本身的数据,包括资源文件和可执行文件等。程序启动以后,会根据需要从该目录中动态加载代码或资源到内存,这里用到了lazy loading的思想。
②整个目录是只读的
为了防止被篡改,应用在安装的时候会将该目录签名。非越狱情况下,该目录中内容是无法更改的;在越狱设备上如果更改了目录内容,对应的签名就会被改变,这种情况下苹果官网描述的后果是应用程序将无法启动,我没实践过。
③是否会被iTunes同步
否
/Document:存放应用程序的数据 (苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录);
/Library:存储程序的默认设置或其它状态信息
子文件夹有Caches, Preferences
/Caches: 保存用户使用应用程序时产生的缓存文件, 比如网络请求的数据. 应用程序通常还需要负责删除这些文件. 不会被iTunes同步;
/Pre