IOS平台下,沙盒的本质就是一个文件夹
每一款IOS应用安装在手机上都会自动的生成一个文件夹。之所以叫沙盒,就是因为这个文件夹是每次运行随机产生的文件夹。沙盒文件夹是独立的,每个应用之间不能互相访问。A应用不能访问B应用的沙盒,是一个安全设置。
沙盒文件包括三个文件夹{Documents、 Library、 tmp}作用
Documents 对于一款应用,想长久存储的数据,都放在这个文件夹下面,但是不能预留的太多(一般是80M,如果过多,在上线的时候容易被拒绝)
Library:
Library/Preference 存放用户的一些偏好设置,如用户名,密码,是否是第一次启动
Library/Caches 缓存文件夹,对于这个文件夹,通过应用去下载的视频、音频、小说、图片
tmp: 文件夹是一个临时的问价夹,一般是存放我们应用程序所下载的压缩包,比如我们下载的Zip压缩包.
上面的三个文件夹是系统自动生成的三个文件夹,用户没有权限去删除。但是我们可以自己创建一个自己能够清除缓存的应用,我们可以删除自己创建的文件夹。
应用程序包的路径:里面包含了我们应用程序加载时候所需要的资源。(上线项目中要上传的一个包)一般是一个 .ipa格式
//获取沙盒文件夹的路径
NSString * homePath = NSHomeDirectory();
NSLog(@"%@",homePath);
//获取应用程序的包
NSString * boundlePath = [[NSBundle mainBundle] bundlePath];
NSLog(@"boundlePath:_>%@",boundlePath);
//获取沙盒文件夹的 Documents 文件夹
//第一个参数:对应搜索的文件夹,就是要查找的文件夹
//第二个参数:是要查找的文件夹所在的范围,用户域中去查找
//第三个参数:设置是否显示一个详细的路径。如果是就给一个 YES
//之前用于 PC (OS X电脑)端,可以同时有多个用户,所以我们获取的是所有的用户的文件路径。而 IOS 平台下,用户只有一个,所以在这里我们获取的路径,就只有一个。
NSString * documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSLog(@"documentsPath_>%@",documentsPath);
//获取其他的文件夹路径
//获取 Library 路径 它有两个子文件夹:Caches Preferences
NSString * LibaryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)firstObject];
NSLog(@"获取 Library 路径_>%@",LibaryPath);
//获取沙盒中 Library 中的 Caches 文件夹路径
NSString * caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
NSLog(@"获取沙盒中 Library 中的 Caches 文件夹路径_>%@",caches);
//获取包中的资源路径
NSString * filePath = [[NSBundle mainBundle] pathForResource:@"某文件名字" ofType:@"文件类型"];
NSLog(@"获取包中的资源路径_>%@",filePath);
//获取沙盒中 Preferences 文件夹路径
//获取 tmp 文件夹
NSString * tmpPath = NSTemporaryDirectory();
NSLog(@"获取 tmp 文件夹_>%@",tmpPath);
//NSUserDefaults 操作的是沙盒文件夹下的 Library 文件夹的 Preference 文件夹
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
//存储用户名
[defaults setObject:@"User" forKey:@"UserName"];
[defaults setObject:@"pasword" forKey:@"PasWord"];
[defaults setBool:YES forKey:@"FirstLunch"];//用来存储第一次启动,系统会自动的走一个保存的方法
[defaults synchronize];//如果,不写这句,过一段时间,程序也会走保存数据,这里就是防止程序突然中断,这里是立即保存数据(简单的不复杂的数据)