沙盒存储操作

//  沙盒存储操作

/**每个iOS程序都有自己的文件系统目录,就是沙盒,并且与其他文件系统、其他应用程序隔离,并且其他应用不能访问该沙盒。

    沙盒下的目录如下:

1、Application:存放程序源文件,上架前经过数字签名,上架后不可修改。

2、Documents:保存应用程序运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录。

3、tmp:保存应用程序运行时所需要的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步时不会备份该目录。

4、Library/Caches:保存应用程序运行时生成需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的重要数据,比如网络数据缓存存储到Caches下。

5、Library/Preference:保存应用的所有偏好设置,如iOS的Settings(设置)应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录。

*/

#import "ViewController.h"

#import "EncodeAndDecode.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

一、属性列表plist存储

    /**

    plist只能存储是写入到Documents目录下且只能是系统自带的一些常规的类,也就是有writeToFile方法的对象才可以使用plist保存数据

    字符串/字典/数据/NSNumber/NSData ...

    自定义的对象不能保存到plist中。

    */

    //1、保存

    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];

    // NSUserDomainMask 在用户目录下查找

    // YES 代表展开用户目录的~

    // NSDocumentDirectory 查找Documents文件夹

    //拼接文件路径

    NSString *path = [doc stringByAppendingString:@"/adc.plist"];

    NSLog(@"%@",path);

    NSDictionary *dictionary= @{@"name":@"abc"};

    [dictionary writeToFile:path atomically:YES];

    //读取

    NSDictionary *readDic = [NSDictionary dictionaryWithContentsOfFile:path];

    NSLog(@"%@",readDic);

二、偏好设置

    //偏好设置在library目录下的preference中

    //偏好设置是专门用来保存应用程序的配置信息的不如保存用户名、密码、字体大小等设置,一般情况不要在偏好设置中保存其他数据

    //偏好设置会将所有的数据保存到同一个文件中

    //1、写入

    NSUserDefaults *defults = [NSUserDefaults standardUserDefaults];

    [defults setObject:@"abc" forKey:@"userName"];

    [defults setObject:@"123" forKey:@"key"];

    //让NSUserDefaults立刻保存数据 注意:NSUserDefaults设置数据时,不要立即写入,而是要根据时间戳定时地把缓存中的数据写入本地磁盘。

    //所以调用set方法之后数据有可能还没有写入磁盘应用程序就终止了。出现以上问题,可以通过调用 synchronize 方法强制写入

    [defults synchronize];//如果立刻保存就需要执行这段代码

    //2、读取

    NSString *name = [defults objectForKey:@"userName"];

    NSString *passWord = [defults objectForKey:@"key"];

    NSLog(@"用户名:%@\n密码:%@",name,passWord);

三、归档

    /**如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,可以直接用NSKeyedArchiver进行归档和恢复

    不是所有的对象都可以直接用这种方法进行归档,只有遵守了NSCoding协议的对象才可以

    NSCoding协议有2个方法:

    encodeWithCoder:

    每次归档对象时,都会调用这个方法。一帮在这个方法里面指定如何归档对象中的每个实例变量,可以使用encodeObject:forKey:方法归档实例变量


    initWithCoder:

    每次从文件中恢复(解档)对象时,都会调用这个方法。一般在这个方法里面制定如何解档文件中的数据为对象的实例变量,可以使用decodeObject:forKey方法解档实例变量

    */

    //1、归档

    //创建对象

    EncodeAndDecode *obj = [[EncodeAndDecode alloc]init];

    obj.name = @"affas";

    obj.passWord = @"3324123";

    //获取文件路径

    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)lastObject];

    //拼接文件路径

    NSString *encodePath = [docPath stringByAppendingString:@"/stu.xxoo"];

    [NSKeyedArchiver archiveRootObject:obj toFile:encodePath];

    EncodeAndDecode *decodeObj = [NSKeyedUnarchiver unarchiveObjectWithFile:encodePath];

    NSLog(@"解档之后\nname:%@\npassWord:%@",decodeObj.name,decodeObj.passWord);

//四、沙盒目录

    //1、程序的Home目录

    /**

                   |--------MyApp.app

    home---|--------Documents

                   |--------Library

                  |--------tmp

    */

    /**

    MyApp.app

    ①存放内容

    该目录包含了应用程序本身的数据,包括资源文件和可执行文件等。程序启动以后,会根据需要从该目录中动态加载代码或资源到内存,这里用到了lazy loading的思想。

    ②整个目录是只读的

    为了防止被篡改,应用在安装的时候会将该目录签名。非越狱情况下,该目录中内容是无法更改的;在越狱设备上如果更改了目录内容,对应的签名就会被改变,这种情况下苹果官网描述的后果是应用程序将无法启动,我没实践过。

    ③是否会被iTunes同步

    否

    */

    NSString *homePath = NSHomeDirectory();

    NSLog(@"程序home目录:%@",homePath);

    /**打印结果

    /var/mobile/Containers/Data/Application/F37B7D9C-9E11-4CE2-B47E-882D296417F0

    */

    //2、Documents目录

    /**

    Documents

    ①存放内容

    我们可以将应用程序的数据文件保存在该目录下。不过这些数据类型仅限于不可再生的数据,可再生的数据文件应该存放在Library/Cache目录下。

    ②是否会被iTunes同步:是

    Documents/Inbox

    ①存放内容

    该目录用来保存由外部应用请求当前应用程序打开的文件。

    比如我们的应用叫A,向系统注册了几种可打开的文件格式,B应用有一个A支持的格式的文件F,并且申请调用A打开F。由于F当前是在B应用的沙盒中,我们知道,沙盒机制是不允许A访问B沙盒中的文件,因此苹果的解决方案是讲F拷贝一份到A应用的Documents/Inbox目录下,再让A打开F。

    ②是否会被iTunes同步

    是

    */

    NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];

    NSLog(@"程序Documents目录:%@",documentPath);

    /**打印结果

    /var/mobile/Containers/Data/Application/B56CC9BE-8953-4213-AF31-27859319DFC5/Documents

    */

   //3、tmp目录

    /**

    ①存放内容

    各种临时文件,保存应用再次启动时不需要的文件。而且,当应用不再需要这些文件时应该主动将其删除,因为该目录下的东西随时有可能被系统清理掉,目前已知的一种可能清理的原因是系统磁盘存储空间不足的时候。

    ②是否会被iTunes同步

    否

    */

    NSString *tmpPath = NSTemporaryDirectory();

    NSLog(@"程序tmp目录:%@",tmpPath);

    /**打印结果

    /private/var/mobile/Containers/Data/Application/D0729DDE-C8BF-4699-9B6F-1CFBC7D38257/tmp/

    */

    //4、Library目录

    /**

    ①存放内容

    苹果建议用来存放默认设置或其它状态信息。

    ②是否会被iTunes同步

    是,但是要除了Caches子目录外

    */

    /**

    Library/Preferences

    ①存放内容

    应用程序的偏好设置文件。我们使用NSUserDefaults写的设置数据都会保存到该目录下的一个plist文件中,这就是所谓的写道plist中!

    ②是否会被iTunes同步

    是

    */

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

    NSLog(@"程序Library目录:%@",libraryPath);

    /**打印结果

    /var/mobile/Containers/Data/Application/23477FDF-68CE-4C42-9D1F-3BD5A7BF76C8/Library

    */

    //5、cache目录

    /**

    ①存放内容

    主要是缓存文件,用户使用过程中缓存都可以保存在这个目录中。前面说过,Documents目录用于保存不可再生的文件,那么这个目录就用于保存那些可再生的文件,比如网络请求的数据。鉴于此,应用程序通常还需要负责删除这些文件。

    ②是否会被iTunes同步

    否。

    */

    NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];

    NSLog(@"程序Caches目录:%@",cachePath);

    /**打印结果

    /var/mobile/Containers/Data/Application/F9A63466-BA79-4291-9C03-92001BC3EFA7/Library/Caches

    */

    //6、写文件

    NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    for (NSInteger i = 0; i < searchPaths.count; i ++) {

        NSString *p = searchPaths[i];

        NSLog(@"[%ld]%@",i,p);

        /**打印结果

        [0]/var/mobile/Containers/Data/Application/B75A8AF9-49BF-4144-8DC9-59554D09292C/Documents

        */

    }

    NSString *writePath = [searchPaths[0] stringByAppendingString:@"/aa.text"];

    NSArray *arr = [NSArray arrayWithObjects:@"文本:",@"text", nil];

    [arr writeToFile:writePath atomically:YES];

    //7、读取文件

    NSArray *readFile = [[NSArray alloc]initWithContentsOfFile:writePath];

    NSLog(@"%@",readFile);

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

@end


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

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,121评论 29 470
  • 学习了数据存储的NSUserDefaults,归档和解档,对于项目开发中如果要存储一些文件,比如图片,音频,...
    今天又要上班吗阅读 854评论 0 1
  • 前言: 出于安全考虑,iOS系统的沙盒机制规定每个应用都只能访问当前沙盒目录下面的文件(也有例外,比如系统通讯录能...
    坤哥lqk阅读 2,084评论 0 4
  • 每天一篇文,一幅字,一张画,已经进行到了第十七天,好像成了一种习惯。每日上班抽空画画或写文,回家完成剩下的部分。半...
    了不起的大金鱼阅读 339评论 2 0
  • 雨天 (文/亦浓) 你说,过节了,还是跟我回去吧。不太好吧,还是算了吧。我说。 我也想回啊,但那个家已经不再属于我...
    开在夜里的花儿阅读 319评论 17 15