SandBox

沙盒(SandBox)包括Documents、Library及tmp,其中Library又包含Caches和Preferences,如下图所示:


沙盒的构成

1.具体的作用:
通俗地讲:Documents 就是用来给用户主动存储数据的文件文档;Library呢就是用来给程序员存储的资源, 其中,Caches是装缓存文件的,Preferences里放用户信息,用户设置等;tmp则是临时目录,用来存储下载的临时文件的.
2.获取沙盒路径:
运用到的是C语言函数.
(1)
如获取根目录:

NSLog( @"Home------%@", NSHomeDirectory());

临时目录:

NSLog(@"Temporary------%@", NSTemporaryDirectory());

(2)
常用的获取Document、以及Caches和Library的方法如下:

NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSLog(@"PathArray-------------%@", [pathArray firstObject]);

参数1含义是搜索对应文件夹路径,可根据需要填入NSDocumentDirectory、 NSCachesDirectory以及NSLibraryDirectory;
参数2含义是在用户作用域下搜索;
参数3含义是:YES表示绝对路径,即可以获取到完整的路径,而NO则表示的是相对路径,即获取到的是较为不完整的路径(当打印路径时,路径前会有~修饰).
(3)
获取.app文件包的方法

NSLog(@"NSBundle---%@",  [NSBundle mainBundle]);

3.简单的文件存储(Input/Output)
(1)将字符串写入本地

NSString *helloString= @[@"Hello, I/O File"];
NSString *writePath = [[pathArray firstObject] stringByAppendingPathComponent:@"hello.text"];
NSError *error = nil;
BOOL isSuccess = [helloString writeToFile:writePath atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (error) {
        NSLog(@"fail");
    } else {
        NSLog(@"success");
}

读取字符串

NSString *readError = nil;
NSString *readString =[NSString stringWithContentsOfFile:writePath encoding:NSUTF8StringEncoding error:&readError];
NSLog(@"%@", readString);

(2)将数组写入本地

NSArray *array = @[@"FLL"];
NSString *arrayPath = [[pathArray firstObject] stringByAppendingPathComponent:@"name.plist"];
BOOL isArrayWriteSuccess = [array writeToFile:arrayPath atomically:YES];
if (isArrayWriteSuccess) {
        NSLog(@"success");
    } else {
        NSLog(@"failure");
}

读取数组

NSArray *nameArray = [NSArray arrayWithContentsOfFile:arrayPath];
NSLog(@"%@", nameArray);

(3)将字典写入本地

NSDictionary *dictionary = @{@"name":@"guo"};
NSString *dicPath = [[pathArray firstObject] stringByAppendingPathComponent:@"dic.plist"];
BOOL isDicSuccess = [dictionary writeToFile:dicPath atomically:YES];
if (isArrayWriteSuccess) {
        NSLog(@"成功");
    } else {
        NSLog(@"失败");
    }

读取字典

NSDictionary *dicContent = [NSDictionary dictionaryWithContentsOfFile:dicPath];
NSLog(@"dic%@", dicContent);

(4)将Data类型写入本地

UIImage *image = [UIImage imageNamed:@"照片"];

将图片转化成二进制(UIImageJPEGRepresentation()/UIImagePNGRepresentation())

NSData *imageData = UIImageJPEGRepresentation(image, 0.1);

其中0.1为缩放比例,可不写则默认为不进行缩放

NSString *dataPath = [[pathArray firstObject] stringByAppendingPathComponent:@"imageData"];
BOOL isDataWriteSuccess = [imageData writeToFile:dataPath atomically:YES];
if (isDataWriteSuccess) {
        NSLog(@"OK!");
    } else {
        NSLog(@"NO OK!");
}

读取Data类型

NSData *imageNewData = [NSData dataWithContentsOfFile:dataPath];
NSLog(@"image:%@", imageData);
UIImage *fileImage = [UIImage imageWithData:imageData];

4.复杂对象文件读写, 自定义类型(归档/反归档,也称序列化/反序列化)
归档:将对象存储到本地

Book *book = [Book new];
book.bookName = @"iOS从入门到放弃";
book.bookType = @"教育";
book.bookPrice = @"64";
book.bookAuthor = @"郭宝";
book.bookAddress = @"郭宝黑科技出版社";
NSString *bookPath = [[pathArray firstObject] stringByAppendingPathComponent:@"book.plist"];
BOOL isBookWriteSuccess =[NSKeyedArchiver archiveRootObject:book toFile:bookPath];
if (isBookWriteSuccess) {
        NSLog(@"欧耶, 你赢了!");
    } else {
        NSLog(@"日了狗了!");
}

反归档:

Book *huangBook = [NSKeyedUnarchiver unarchiveObjectWithFile:bookPath];
NSLog(@"%@", huangBook.bookName);
//
//  Book.h
//  17-SandBox
//
//  Created by 郭宝 on 16/8/5.
//  Copyright © 2016年 郭宝. All rights reserved.
//

#import <Foundation/Foundation.h>
// 1.需要归档的类, 需要签订和实现 <NSCoding> 协议
@interface Book : NSObject <NSCoding>

@property (nonatomic, copy) NSString *bookName;
@property (nonatomic, copy) NSString *bookPrice;
@property (nonatomic, copy) NSString *bookAuthor;
@property (nonatomic, copy) NSString *bookAddress;
@property (nonatomic, copy) NSString *bookType;

@end
//
//  Book.m
//  17-SandBox
//
//  Created by 郭宝 on 16/8/5.
//  Copyright © 2016年 郭宝. All rights reserved.
//

#import "Book.h"

@implementation Book
// 取值
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    self = [super init];
if (self) {
        _bookName = [aDecoder decodeObjectForKey:@"bookName"];
        _bookPrice = [aDecoder decodeObjectForKey:@"bookPrice"];
        _bookAddress = [aDecoder decodeObjectForKey:@"bookAddress"];
        _bookType = [aDecoder decodeObjectForKey:@"bookType"];
        _bookAuthor = [aDecoder decodeObjectForKey:@"bookAuthor"];
    }
    return self;
}
// 赋值, 存储
- (void)encodeWithCoder:(NSCoder *)aCoder {
    [aCoder encodeObject:_bookName forKey:@"bookName"];
    [aCoder encodeObject:_bookAddress forKey:@"bookAddress"];
    [aCoder encodeObject:_bookPrice forKey:@"bookPrice"];
    [aCoder encodeObject:_bookType forKey:@"bookType"];
    [aCoder encodeObject:_bookAuthor forKey:@"bookAuthor"];
}

接下来Finder->前往文件夹->粘贴PathArray->前往.


PathArray.png

前往文件夹.png

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

推荐阅读更多精彩内容