iOS 沙盒机制

  • 沙盒机制:是一种安全体系的表现,我们开发的每一个应用程序,都会有一个对应的沙盒文件夹,当前程序只能在自己的沙盒文件中读取文件,不能访问其他应用程序的沙盒,一般存储的是非代码的资源(例如:图片,视频,声音).....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];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容

  • 前言:突然想学习一下,沙盒,看了那么多博客,我四处的搜集一下总结一下,为了以后方便学习,留存一篇整合的文章。 一、...
    麦穗0615阅读 12,208评论 5 28
  • 沙盒机制 出于安全考虑,iPhone对于安装在上面的应用程序有所限制,这个限制就是应用程序只能在为该改程序创建的文...
    Joker_King阅读 13,196评论 1 15
  • iOS为每个应用提供了独立的文件空间,一个应用只能直接访问本应用分配的文件目录,不可以访问其他目录,每个应用自己独...
    kamto阅读 1,057评论 0 4
  • iOS沙盒机制 沙盒机制 不好意思,我又一次来到了你们的世界,其实我是拒绝的,但是我的无法忍受内心的躁动!额我TM...
    iOSDevVicky阅读 1,983评论 0 12
  • iOS开发之沙盒机制(SandBox)详细讲解了沙盒的一些机制。在开发中,我们需要对沙盒进行操作,所以我们需要获取...
    小灬博阅读 3,745评论 1 4