本文共 3527 字,大约阅读时间需要 11 分钟。
SandBox,沙盒机制,是一种安全体系。我们所开发的每一个应用程序在设备上会有一个对应的沙盒文件夹,当前的程序只能在自己的沙盒文件夹中读取文件,不能访问其他应用程序的沙盒。在项目中添加的所有非代码的资源,比如图片、声音、属性列表等都存在自己的沙盒中。此外,在程序运行中动态生成的或者从网络获取的数据,如果要存储,也都是存储到沙盒中。
获取沙盒文件:
获取模拟器的沙盒文件使用断点,在控制台选中输入 po NSHomeDirectory()复制沙河路径,点击一下桌面空白处,command+shift+G,粘贴沙盒路径,回车即可2.获取真机的沙盒路径 选择Xcode导航栏中的 Window -> Devices 左侧选择手机,右侧选择需要的app 双击需要的app,会出现一个界面,以name+版本号+container命名,但是里面的内容需要加载一段时间,并且内容只能阅读 在所有app的下方存在以 "+", "-", "齿轮" 构成的区域,左击齿轮,选择 Download Container,进行下载 右击下载包,选择显示包内容,选择AppData,里面就是沙盒文件夹
NSUserDefaults 数据时保存在 沙盒里面的,会随着软件删除而被清空。
Application Bundle:包含应用可执行文件和所有资源文件,只读。
Document/ 存放应用运行时生成的并且需要保存的数据。iTunes或iCloud同步设备时备份该目录。
Library/Caches/ 存放应用运行时生成的并且需要保存的数据。iTunes或iCloud不同步。
Library/Preferences/ 存放偏好设置。ios的偏好设置(settings)应用也会在该目录查找应用的设置信息。NSUserDefaults保存在该目录下。iTunes或iCloud同步设备时备份该目录。
temp/ 存放应用运行时所需的临时数据。当某个应用没运行时,ios系统可能会清除该目录下的文件。但不可依赖这种自动清除机制,应该及时手动清除。
1、获取沙盒根目录的方法
NSString *homeDir = NSHomeDirectory();
2、获取Document路径
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();
iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。 1.1、每个应用程序都有自己的存储空间 1.2、应用程序不能翻过自己的围墙去访问别的存储空间的内容 1.3、应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行。 从表层上理解sandbox是一种安全体系,应用程序的所有操作都要通过这个体系来执行,其中核心内容是:sandbox对应用程序执行各种操作的权限限制。
//使用的时候需要重新拼接存储路径/** *documentstr 中间文件夹的名字 *filePath 原来的路径 **/-(NSString *)repinjiestorePathWithdocumentstr:(NSString *)documentstr filepath:(NSString *)filePath{ //重新拼接路径,每一次重新打包app,沙盒路径都会变,最后的文件名不变 NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject; //自定义新的文件夹video NSString *video = [documentPath stringByAppendingPathComponent:documentstr]; NSString *fileName = [filePath componentsSeparatedByString:@"/"].lastObject; NSString *newsPath = [video stringByAppendingPathComponent:fileName]; return newsPath;}//偏好存储-(void)defaultStoreObject:(NSString *)filepathstr cameraname:(NSString *)cameraname key:(NSString *)preorbackkey{ //存储偏好设置 NSUserDefaults *predefault=[NSUserDefaults standardUserDefaults]; NSArray *pretemparr=[predefault objectForKey:preorbackkey]; NSMutableArray *prefilepatharr=nil; if(!pretemparr){ prefilepatharr=[[NSMutableArray alloc]init]; }else { prefilepatharr=[NSMutableArray arrayWithArray:pretemparr]; } if(filepathstr &&![filepathstr isEqualToString:@""]){ NSDictionary *dict=@{@"cameraname":cameraname?cameraname:@"",@"filepath":filepathstr?filepathstr:@""}; [prefilepatharr addObject:dict]; } [predefault setObject:prefilepatharr forKey:preorbackkey]; [predefault synchronize];}//读取偏好存储-(NSArray *)readDefaulfStoreobjectWithkey:(NSString *)preorbackkey{ NSUserDefaults *predefault=[NSUserDefaults standardUserDefaults]; NSArray *pretemparr=[predefault objectForKey:preorbackkey]; NSArray *prefilepatharr=nil; if(!pretemparr){ prefilepatharr=[[NSArray alloc]init]; }else { prefilepatharr=pretemparr; } return prefilepatharr;}//删除所有沙盒缓存-(void)delAlldatasWith:(NSString *)preorback{ NSArray *prearr=[[HximCommanManager sharedCommonManager] readDefaulfStoreobjectWithkey:preorback]; for (int i=0; i
重新运行app沙盒路径失效的问题:解决--//重新拼接路径,每一次重新打包app,沙盒路径都会变,最后的文件名不变
转载地址:http://zzmgi.baihongyu.com/