在我记忆中,沙盒文件夹应该是有四个,但是我今天在模拟器中打开的时候只有三个:Documents、Library、tmp。如下图:
上网查了下,还有个AppName.app,接下来一一对这些文件夹做出介绍。
1、Documents:数据持久化可以写到这个文件夹下,包括用户信息,或者离线阅读功能,也就是下载的文件
2、Library:这个文件夹中有两个子文件夹:Caches、Preferences,与Documents类似,也可以做数据持久化,但是与Document不同的是,Caches文件不能保证完美持久化,根据官方文档说:在一些特殊情况下(系统恢复或者磁盘空间太低)会被删除,因此每次使用里面的数据时得先查文件是否还存在。
该图是Library文件夹的结构,当前被选中的plist文件就是代码中常用到的NSUserDefault类所存储的文件。
3、tmp:这个文件不能存储持久化数据,每次程序再次打开的时候会被清空。
4、AppName.app:看名字就应该知道了,就是应用程序的安装包,包含应用程序本身,不能对该文件做修改。
注:以上四个文件夹都存放在一个名为Application_Home的文件夹中。
以下是每个文件夹的获取方法:
1、Application_Home
NSString *homeDir = NSHomeDirectory();
2、Documents
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
3、Caches
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesDir = [paths objectAtIndex:0];
4、tmp
NSString *tmpDir = NSTemporaryDirectory();
5、获取资源文件的方法,以icon.png为例:
[[NSBundle mainBundle] pathForResource:@”icon” ofType:@”png”];
关于Documents和Library文件夹的官方叙述如下(软件升级过程):
Files Saved During Application Updates When a user downloads an application update, iTunes installs the update in a new application directory. It then moves the user’s data files from the old installation over to the new application directory before deleting the old installation. Files in the following directories are guaranteed to be preserved during the update process:
Application_Home/Documents
Application_Home/Library
Although files in other user directories may also be moved over, you should not rely on them being present after an update.
说简单就是在升级的时候,系统先创建一个新的应用目录,在该目录下安装新最新软件,再把旧目录下的数据拷贝过来,之后再删除旧目录。此时应该注意:以前做游戏的时候用户关卡数据需要先读取,然后再写文件,具体过程现在有点记不清了。