什么是沙盒(sandbox)?
出于安全的目的,应用程序只能将自己的数据和偏好设置写入到几个特定的位置上。当应用程序被安装到设备上时,系统会为其创建一个家目录,这个家目录就是应用程序的沙盒。
一、各目录的作用:
1、Documents:只有用户生成的文件、其他数据及其他程序不能重新创建的文件,应该保存在<Application_Home>/Documents 目录下面,并将通过iCloud自动备份。
2、Library:存储程序的默认设置或其它状态信息,这个目录下有两个子目录:Caches 和 Preferences。
Caches:此目录下文件不会在应用退出删除,可以重新下载或者重新生成的数据应该保存在 <Application_Home>/Library/Caches 目录下面。举个例子,比如杂志、新闻、地图应用使用的数据库缓存文件和可下载内容应该保存到这个文件夹。
Preferences:目录包含应用程序的偏好设置文件。您不应该直接创建偏好设置文件,而是应该使用NSUserDefaults类来取得和设置应用程序的偏好。
3、tmp:只是临时使用的数据应该保存到 <Application_Home>/tmp 文件夹。尽管 iCloud 不会备份这些文件,但在应用在使用完这些数据之后要注意随时删除,避免占用用户设备的空间。iPhone在重启时,会丢弃所有的tmp文件。
二、获取个目录的方法:
//Home目录 NSString *homeDirectory = NSHomeDirectory(); //NSUserDomainMask:常量,表面将搜索限制与当前应用程序的沙盒中,这样的话只能找到一个Documents目录,因为每个应用程序沙盒中只有一个Documents目录 //Document目录 documents (Documents) NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); NSString *path = [paths objectAtIndex:0]; //Libaray目录 various documentation, support, and configuration files, resources (Library) NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES); NSString *path = [paths objectAtIndex:0]; //Cache目录 location of discardable cache files (Library/Caches) NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES); NSString *path = [paths objectAtIndex:0]; //tmp目录 NSString *path = NSTemporaryDirectory();
总结:
简单的说明:如果你做个记事本的app,那么用户写了东西,总要把东西存起来。那么这个文件则是用户自行生成的,就放在documents文件夹里面。
如果你有一个app,需要和服务器配合,经常从服务器下载东西,展示给用户看。那么这些下载下来的东西就放在library/cache。