作为ios开发,其实很多时候要了解一些底层的东西才能有所进步,那么今天就来分享下经常面对的ios的沙盒存储吧。
首先要理解什么是沙盒?
iOS中应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,这个区域就被称作沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。
打个比方吧,咱们去银行办事要讲规矩吧,另外银行也要安全的保障,不会让你随便的乱进入。当你需要访问办事情的时候,他会给你指定一个特定的区域让你去存取你的东西,而每个人也要遵守它的规章制度。
那么这个特定的区域是什么的呢,就是沙盒呗,打开沙盒的主目录的方法说两个,都可以
方法一:
NSString *path =NSHomeDirectory();//沙盒
NSLog(@"NSHomeDirectory:%@我是沙盒主目录",path);
方法二:
NSString *userName =NSUserName();//沙盒
NSString *rootPath =NSHomeDirectoryForUser(userName);
NSLog(@"NSHomeDirectoryForUser:%@我是沙盒主目录",rootPath);
沙盒的主目录里还装着其他的东西,就好比银行的金库里面子金库,分别存放不同的东西。
首先介绍第一个Application,它是程序文档目录,不存放东西,你去也去不了
下面是重点(也就是说你能去的子金库):
Document,library下面的Caches和Preferences,tmp
Document:一般存放需要持久化存储的文件,iTunes会自动备份这个目录,文件比如说程序建立或者浏览到的文件数据等(反正不想让它消失或者重要的都放这里)
library中的Caches:指的就是缓存,也就是程序运行时临时的数据,比如你浏览的图片,视频什么的,iTunes不会备份这个目录,应用没有运行时,它可能会被清除,内存不足是会被清除(反正就是体积大,需要暂时持久化的数据,不重要的东西,比如图片,视频,这些从网上下载的东西就放这里)
library中的Preference:指的是你的偏好设置,iTunes会自动备份这个目录,它存储一些偏好设置(比如用户名,密码,字体大小,夜间模式之类的)
tmp:顾名思义,它就是存放临时文件的数据,iTunes不会备份这个目录,应用没有运行时,应用退出后会被清除。
总结:需要长时间持久化存储的东西放在Document,不重要,但是体积大的交给library,最后临时的没用的拿给tmp(他们对我们程序员的重要性也依次递减)。