沙盒(Sandbox)
一、iOS沙盒机制
沙盒是系统单独开辟的存储区域,用来保存非代码文件。所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。
iOS应用程序只能在为该改程序创建的文件中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。 默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp,因为应用的沙盒机制,应用只能在几个目录下读写文件
1.Documents:
//保存应⽤运行时生成的需要持久化的数据,并将通过iCloud自动备份。例如,游戏应用可将游戏存档保存在该目录,iTunes备份和恢复的时候会包括此目录
2.Library:
//Library/Caches:保存应用运行时⽣成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的非重要数据。比如杂志、新闻、地图应用使用的数据库缓存文件和可下载内容应该保存到这个文件夹。
//Library/Preference:保存应用的所有偏好设置,iOS的Settings(设置) 应⽤会在该⺫录中查找应⽤的设置信息。iTunes同步设备时会备份该目录
3.tmp:
//保存应⽤运行时所需的临时数据,使⽤完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时 不会备份该目录
二、代码实现
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSString *path = NSHomeDirectory();//获取沙盒路径--找到沙盒存储空间
NSLog(@"--%@",path);
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSString *path = NSHomeDirectory();//获取沙盒路径--找到沙盒存储空间
NSLog(@"--%@",path);
//找到沙盒路径--1, 2
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);//通过search找到沙盒的路径集合
NSLog(@"==>%@",paths);
NSString *dPath = [path stringByAppendingPathComponent:@"tmp"];//通过字符串的路径拼接方法,找到沙盒路径--(沙盒有3个路径,通过三个路径的字符串,可以找到这三个路径)
NSLog(@"dPath:%@",dPath);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);//通过search找到沙盒的路径集合
NSLog(@"==>%@",paths);
NSString *dPath = [path stringByAppendingPathComponent:@"tmp"];//通过字符串的路径拼接方法,找到沙盒路径--(沙盒有3个路径,通过三个路径的字符串,可以找到这三个路径)
NSLog(@"dPath:%@",dPath);
//取出documents路径
NSString *documentPath = [paths firstObject];
NSLog( @"------%@",documentPath);
NSLog( @"------%@",documentPath);
NSString *str = @"姑娘你好";
NSString *txtPath = [path stringByAppendingPathComponent:@"1.txt"];
[str writeToFile:txtPath atomically:YES encoding:NSUTF8StringEncoding error:nil];//将字符串写入1.txt,如果没有此文件,系统会先创建,再写入,如果已经存在,则覆盖原有的文件
[str writeToFile:txtPath atomically:YES encoding:NSUTF8StringEncoding error:nil];//将字符串写入1.txt,如果没有此文件,系统会先创建,再写入,如果已经存在,则覆盖原有的文件
// //将图片写入沙盒,首先需要将图片转换成data
// UIImage *image = [UIImage imageNamed:@"1.jpg"];
// NSData *data = UIImageJPEGRepresentation(image, 1);
// UIImage *image = [UIImage imageNamed:@"1.jpg"];
// NSData *data = UIImageJPEGRepresentation(image, 1);
// [data writeToFile:[dPath stringByAppendingString:@"/1.jpg"] atomically:YES];//如果使用stringByAppendingString拼接路径,则需要在文件前加
}