iOS沙盒文件目录详解

来源:互联网 发布:网络代销挣钱吗 编辑:程序博客网 时间:2024/06/05 23:52

1、每个应用的沙盒目录都是相似的,主要包含app的两个文AppName.app   

data

   【1】AppName.app 目录:这是应用程序的程序包目录,包含应用程序的本

身。(包括资源文件和可执行文件等。程序启动以后,会根据需要从该目录

中动态加载代码或资源到内存)    

 由于应用程序必须经过签名,所以您在运行时不能对这个目录中的内容进

 行修改,否则可能会使应用程序无法启动。

  【2】整个目录是只读的

    为了防止被篡改,应用在安装的时候会将该目录签名。非越狱情况下,该目   

    录中内容是无法更改的;在越狱设备上如果更改了目录内容,对应的签名就

    会被改变,这种情况下苹果官网描述的后果是应用程序将无法启动

  【3】不会被iTunes同步

 

2、默认情况下,每个沙盒data含有3个文件夹:Documents, Library 和 tmp。

  【1】Documents我们可以将应用程序的数据文件保存在该目录下。不过这  

些数据类型仅限于不可再生的数据(如数据库文件,项目配置文件),可再生 

的数据文件(如图片缓存文件)应该存放在Library/Cache目录下。会被

iTunes同步。该文件夹除Documents/Inbox 文件外可执行增删改查操作。

 

  【2】Documents/Inbox该目录用来保存由外部应用请求当前应用程序打开

的文件(系统复制到此目录下)  此目录下的文件只能读取 或者 删除 不能 

修改内容  同样会被iTunes同步

 

  【3】Library苹果建议用来存放默认设置或其它状态信息。会被iTunes同步

    但是要除了Caches子目录外

 

 【4】Library/Caches主要是缓存文件,用户使用过程中缓存都可以保存在这

   个目录中。这个目录就用于保存那些可再生的文件,可以重新下载或者重新

   生成的数据应该保存在目录下面。(比如杂志、新闻、地图应用使用的数据库

   缓存文件和可下载内容应该保存到这个文件夹)。磁盘空间不够时 系统会删

   除 不会被iTunes同步

 

 【5】Library/Preferences应用程序的偏好设置文件。我们使用NSUserDefaults

   写的设置数据都会保存到该目录下的一个plist文件中,这就是所谓的写道

   plist中! 会被iTunes同步

 

 【6】tmp

   各种临时文件,保存应用再次启动时不需要的文件。而且,当应用不再需要   

   这些文件时应该主动将其删除,因为该目录下的东西随时有可能被系统清理

   掉,也可能随着项目退出删掉。

   不会被iTunes同步

 

 

//取得Documents路径的方法:  

- (NSString *)documentFolder{  

   return [NSHomeDirectory()stringByAppendingPathComponent:@"Documents"]; 

}  

 

//取得Documents中某个文件的路径  

NSString *path= [[self documentFolder]stringByAppendingPathComponent:@"image.png"]; 

 

//获取tmp目录

NSString *tempPath= NSTemporaryDirectory();

 

//补充:取得应用程序包(即bundle)的路径  

- (NSString *)bundleFolder{  

   return [[NSBundle mainBundle]bundlePath]; 

}

 

获取这些目录路径的方法:

//返回Documents路径

//方法1 iOS4.0版本以上的可以使用该方法获取url

- (NSURL *)applicationDocumentsDirectory_New {

    NSURL *documentsDictoryURL = [[[NSFileManagerdefaultManager] URLsForDirectory:NSDocumentDirectoryinDomains:NSUserDomainMask]lastObject];

    NSURL *storeURL = [documentsDictoryURLURLByAppendingPathComponent:@"Data.sqlite"];

    return storeURL;

}

 

//方法2 iOS4.0版本以下的可以使用该方法获取url

- (NSURL *)applicationDocumentsDirectory_Old {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);//程序文件夹主目录

    NSString *documentsDirectory =[pathsobjectAtIndex:0];//Document目录

    NSString *storePath =[documentsDirectorystringByAppendingPathComponent:@"Data.sqlite"];

    NSURL *storeURL = [NSURLfileURLWithPath:storePath];

    return storeURL;

}

 

 

//1,获取家目录路径的函数:

NSString *homeDir = NSHomeDirectory(); 

 

//2,获取Documents目录路径的方法:

// NSSearchPathForDirectoriesInDomains参数

第一个参数指定了搜索的路径名称,NSDocumentDirectory表示是在Documents中寻找.NSCacheDirectory的话就是在cache文件中寻找.

第二个参数限定了文件的检索范围只在沙箱内部.其意义为用户电脑主目录.也可以修改为网络主机等.

最后一个参数决定了是否展开波浪线符号.展开后才是完整路径,这个布尔值一直为YES.

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,获取应用程序程序包中资源文件路径的方法:

//例如获取程序包中一个图片资源(apple.png)路径的方法:

NSString *imagePath = [[NSBundlemainBundle]pathForResource:@"apple"ofType:@"png"];

UIImage *appleImage = [[UIImagealloc]initWithContentsOfFile:imagePath];

//代码中的mainBundle类方法用于返回一个代表应用程序包的对象。

 

//6 获取文件中的Image地址及UIImage

NSString*imagePath = [[[NSBundlemainBundle] resourcePath]stringByAppendingPathComponent:@"Image"];

imagePath = [imagePath stringByAppendingPathComponent:@"bg"];

imagePath = [imagePath stringByAppendingPathComponent:@"bg.png"];

1 0