一、沙盒(sandbox)

iOS的应用只能访问为该应用创建的区域,不可访问其他区域,应用的其他非代码文件都存在此目录下,包括图片,属性文件plist,bundle,nib文件等,这块区域称之为沙盒(sandBox)。

  1. 每个应用都有属于自己的存储空间,即沙盒
  2. 应用只能访问自己的沙盒,不可访问其他区域
  3. 如果应用需要进行文件操作,则必须将文件存放在沙盒中,尤其是数据库文件,在电脑上操作时,可以去访问,但是如果要装在真机上可以使用,必须将数据库文件拷贝至沙盒中。


出于安全的目的,应用程序只能将自己的数据和偏好设置写入到几个特定的位置上。当应用程序被安装到设备上时,系统会为其创建一个家目录,这个家目录就是应用程序的沙盒。


家目录下共有四个子目录:


Documents 目录:您应该将所有的应用程序数据文件写入到这个目录下。这个目录用于存储用户数据或其它应该定期备份的信息。

AppName.app 目录:这是应用程序的程序包目录,包含应用程序的本身。由于应用程序必须经过签名,所以您在运行时不能对这个目录中的内容进行修改,否则可能会使应用程序无法启动。

Library 目录:这个目录下有两个子目录:Caches 和 Preferences

    Preferences 目录包含应用程序的偏好设置文件。您不应该直接创建偏好设置文件,而是应该使用NSUserDefaults类来取得和设置应用程序的偏好

    Caches 目录用于存放应用程序专用的支持文件,保存应用程序再次启动过程中需要的信息。

tmp 目录:这个目录用于存放临时文件,保存应用程序再次启动过程中不需要的信息。


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

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

NSString *homeDir = NSHomeDirectory();

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

//获取Documents文件夹1    
    NSString * documents1 = [NSString stringWithFormat:@"%@/Documents",sandBoxPath];
    NSLog(@"documents1===%@",documents1);

    
               //获取Documents文件夹2  用这个方法会自动给我们加一个/
    NSString * docuemts2 = [sandBoxPath stringByAppendingPathComponent:@"Documents"];
    NSLog(@"documenst2=====%@",docuemts2);

                //获取Documents文件夹3    
    //第一个参数,让你写你要找哪个文件
    //第二个参数,让你指定从哪个地方找你要找的文件
    //第三个参数,找到文件后是否展开
    NSArray *documetns3 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO);
  
    NSLog(@"documents3====%@",documetns3[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类方法用于返回一个代表应用程序包的对象。
 //找到library文件夹
    NSArray * library = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
    NSLog(@"library=====%@",library);

  //找到Temp文件夹
    NSString *temp = NSTemporaryDirectory();
    NSLog(@"temp===%@",temp);

  
   
//    //找到系统资源文件
    NSString * bundle = [[NSBundle mainBundle] bundlePath];
    NSLog(@"bundle=====%@",bundle);

//    //获取工程文件路径
    NSString * imagePath = [[NSBundle mainBundle] pathForResource:@"3" ofType:@"png"];
    NSLog(@"imagePath=====%@",imagePath);