美文网首页
iOS 沙盒机制

iOS 沙盒机制

作者: 唐半仙丶 | 来源:发表于2016-05-23 23:01 被阅读145次
  • 沙盒机制:是一种安全体系的表现,我们开发的每一个应用程序,都会有一个对应的沙盒文件夹,当前程序只能在自己的沙盒文件中读取文件,不能访问其他应用程序的沙盒,一般存储的是非代码的资源(例如:图片,视频,声音).....iOS8之后开辟一些空间可以供其他应用程序访问.
    在程序中动态生成的或者是从网络上请求下来的资源,如果存储的话,也是要存储在沙盒文件中.

    NSString *homePath = NSHomeDirectory();

沙盒文件1:Documents

Document文件作用:苹果建议将程序中建立的或者在程序中浏览的文件数据保存在该目录下,itunes备份和回复的时候也会包含此目录

  • 三个参数:
 *
 *  @param NSDocumentDirectory 它是一个枚举值,枚举你具体要查看的文件夹[要进入哪个文件夹直接修改其枚举值就可以]
 *  @param NSUserDomainMask    表示用户主目录
 *  @param YES                 一般设置为YES表示展示完整路径
 *
 

 NSString *document = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

沙盒文件2:library

    • 存储程序默认设置,或者是其他状态信息,里边包含两个文件夹caches,Preferences
    • caches:缓存文件,会将app缓存的一些数据,例如音频,视频等文件存放其中,(不会被itunes同步)
    • Preferences:偏好设置文件夹,会将app的偏好设置存放在这个文件夹中,比如说:是否允许访问图片,是否允许访问地理位置......

    NSString *library = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];

2.1:获取Library/Caches目录

NSString *paths = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSLog(@"%@",paths);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];

2.2:获取Library/Preferences目录

    NSArray *path2 = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
   //stringByAppendingPathComponent:就是将前面路径格式和后面的普通字符串格式连接在一起,并且以路径格式返回.
NSString *path1 = [[path2 objectAtIndex:0] stringByAppendingPathComponent:@"Preferences"];
 NSLog(@"----%@",path1);

沙盒文件3:tmp

  • tmp临时文件夹,里面放着的是app获取到的一些临时文件夹.例如:当需要展示图片时,在临时文件中先过滤,一旦展示到界面时,就会将临时文件中的数据清除. 关闭程序时,会自动清除临时文件中的数据.
  • 由于是临时文件,所以不会被itunes同步备份.
 NSString *tmpPath = NSTemporaryDirectory();
 NSLog(@"%@",tmpPath);
     //获取xxxx.app文件地址
    NSString *appPath = [[NSBundle  mainBundle] resourcePath];
    NSLog(@"%@",appPath);

将NSArray类型的数据存储到本地

#pragma mark ---  将NSArray类型的数据存储到本地
    //1:找到Documents文件夹
    NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    //2:创建需要存储的数组
    NSArray *array = @[@"小明",@"小丽",@"小花",@"小强",@"小红"];
    //3:创建数组存储的最终路径
    NSString *arrayPath = [documentsPath stringByAppendingPathComponent:@"BJS.plist"];
    //4:写入本地
    [array writeToFile:arrayPath atomically:YES];
    
    NSLog(@"arrayPath = %@",arrayPath);
    
    //将存在本地的数据取出
    NSArray *newArray = [NSArray arrayWithContentsOfFile:arrayPath];
    NSLog(@"newArray = %@",newArray);
    

将字典类型的数据存储到本地

#pragma mark ----  将字典类型的数据存储到本地
    //找到文件路径
    NSString *documentPath= [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    //创建存储字典的文件夹
    NSDictionary *dictionary = @{@"name":@"小丽",@"gender":@"未知",@"age":@"18"};
    //最终存入的路径
    NSString *dicPath = [documentPath stringByAppendingString:@"/wj.plist"];
    //写入:
    [dictionary writeToFile:dicPath atomically:YES];
    NSLog(@"dicPath = %@",dicPath);
    
    //读取:
    NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:dicPath];
    NSLog(@"dic = %@",dic);

将NSData类型的数据存储到本地(以图片为例)

  • 常用两种初始化image的方式:
  • 1:使用imageNamed:第一次读取的时候,会先把这个图片放到缓存当中,下次在使用到这个同名的图片时,直接从缓存中读取.
    有点:方便快捷,只有第一次使用的时候稍慢,接下来在使用就会快些.
    缺点:如果在当前工程中大量会大量的浪费内存空间
    UIImage *image = [UIImage imageNamed:@"v_red_heart_selected@3x"];//这种初始化方法可以直接不给出图片的具体名字,它会自动匹配
  • 2:使用initWithContentsOfFile:初始化图片时,每次都会根据路径去读取,不会占用内存,如果图片在当前工程中只使用一次,应该选择这个方法.
#pragma  mark ---  将NSData类型的数据存储到本地(以图片为例)
   NSString *filePath = [[NSBundle mainBundle] pathForResource:@"v_red_heart_selected@3x.png" ofType:nil];//这种必须拼接图片的全名称,否则image路径为空
   UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath];
   
   //将image类型的对象转换成为NSData类型数据进行存储
   //使用UIImageJPEGRepresentation:将图片转换成为NSData类型
   //第一个参数:要转换的image对象
   //第二个参数:表示图片压缩的值
   //IPhone中将大于2M的图片,使用该方法,最终会将图片保存成jpeg格式
   NSData *imageData = UIImageJPEGRepresentation(image, 1);
   //找到路径存储
   NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
   //最终路径
   NSString *imagePath = [documentPath stringByAppendingString:@"/1234.jpeg"];
   
   [imageData writeToFile:imagePath atomically:YES];
   
   NSLog(@"imagePath = %@",imagePath);
   
   //读取NSData类型的数据
   //需求:将NSData类型的数据读取出来,转换成为UIImage类型并且显示在imageView上
   NSData *newData = [NSData dataWithContentsOfFile:imagePath];
   UIImage *showImage = [[UIImage alloc] initWithData:newData];
   UIImageView *showImageView = [[UIImageView alloc] initWithImage:showImage];
   [self.view addSubview:showImageView];

相关文章

  • iOS 系统相关复习

    沙盒 iOS沙盒详细介绍iOS沙盒篇 沙盒机制介绍 iOS中的沙盒机制是一种安全体系。为了保证系统安全,iOS每个...

  • 使用沙盒的正确姿势

    在学习iOS存储方法之前,先了解一下iOS存储机制——沙盒应用沙盒机制:每个iOS应用都有自己的应用沙盒(文件系统...

  • Objective-C沙盒结构

    导读: 一、什么是沙盒机制二、沙盒的特点三、沙盒的结构组成四、获取沙盒目录路径 一、什么是沙盒机制 iOS中的沙盒...

  • OC - 沙盒

    导读: 一、什么是沙盒机制 二、沙盒的特点 三、沙盒的结构组成 四、获取沙盒目录路径 一、什么是沙盒机制 iOS中...

  • IOS中的数据持久化之沙盒篇

    提到数据持久化 我们必须得先了解IOS程序的沙盒机制(sandBox)。 1.IOS沙盒机制介绍 iOS应用程...

  • iOS 的机制

    1、SandBox机制(沙盒机制) Sandbox 被简称为 应用程序沙盒,沙盒 或者 沙箱。在 iOS (mac...

  • iOS 开发之沙盒机制

    iOS 开发之沙盒机制

  • 05-iOS数据存储

    一、iOS沙盒机制 iOS的每个应用都有属于自己的存储空间,即沙盒应用只能访问自己的沙盒,不可访问其他区域。 沙盒...

  • iOS数据持久化(1)-文件读写

    1.沙盒机制 iOS采用沙盒机制管理应用,应用只能访问自己目录下的文件。iOS不像Android,没有SD卡概念,...

  • 数据持久化

    数据持久化 IOS沙盒机制(SandBox) IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序...

网友评论

      本文标题:iOS 沙盒机制

      本文链接:https://www.haomeiwen.com/subject/istzrttx.html