iOS APP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒。每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URL Scheme。沙盒里面的文件可以是照片、声音文件、文本、属性列表等。

沙盒机制介绍

沙盒简述:

1.每一个APP都有一个存储空间,就是沙盒.

2.APP之间不能互相通信

3.沙盒根目录结构:Documents, Library, temp

简述一下Documents, Library, temp的区别:

1.Documents:  用于存储用户数据,  iTunes备份和恢复的时候会包括此目录, 所以, 苹果建议将程序中建立的或在程序中浏览到的文件保存在改目录下.

2.Library: 包含两个子目录 : Caches和Preferences.  Caches用来存放用户需要换成的文件, Preferences是APP的偏好设置, 可以通过NSUserDefaults来读取和设置.

3.tmp: 用于存放临时文件,这个可以放一些当APP推出后不需要的文件

打开模拟器沙盒方法

方法一:前往文件夹打开

/Users/ligang/Library/Application Support/iPhone Simulator/

直接在Finder->前往->前往文件夹,输入上面的内容即可。记住将ligang换成你的电脑用户名。

方法二:通过Finder一步步查找

模拟器上的APP的沙盒实在用户目录下的资源库里面,但是资源库是隐藏文件夹。所以查看沙盒之前,现将隐藏文件夹显示出来。显示隐藏文件的命令:

defaults write com.apple.finder AppleShowAllFiles -bool true

用心的童鞋会发现,隐藏隐藏文件的命令:

defaults write com.apple.finder AppleShowAllFiles -bool false

查找步骤请看图:

iOS开发之获取沙盒路径

获取沙盒根目录

获取沙盒根目录,直接调用NSHomeDirectory():

 //获取沙盒根目录
NSString *directory = NSHomeDirectory();
NSLog(@"directory:%@", directory);

控制台输出:

2015-07-22 00:40:16.185 iOSStrongDemo[1605:555658] directory:/var/mobile/Containers/Data/Application/F9418815-51A9-4A0A-A76C-6FD37C400928

这个是真机的路径,大家有时间的话可以看看模拟器的根目录路径。

获取Documents路径

获取Documents路径如下:

//获取Documents路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSLog(@"path:%@", path);

控制台输出:

2015-07-22 00:41:41.397 iOSStrongDemo[1613:556159] path:/var/mobile/Containers/Data/Application/A62B886B-A8F0-4215-B59D-1F505C3997BD/Documents

获取Documents文件夹目录,第一个参数是说明获取Doucments文件夹目录,第二个参数说明是在当前应用沙盒中获取。

获取Library路径

 //获取Library路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSLog(@"path:%@", path);

控制台输出:

2015-07-22 00:43:15.803 iOSStrongDemo[1619:556638] /var/mobile/Containers/Data/Application/17300507-4643-4DE7-BC68-E13DB19C8D98/Library

获取Caches路径

//获取Caches路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSLog(@"path:%@", path);

控制台输出:

2015-07-22 00:44:31.383 iOSStrongDemo[1626:557083] path:/var/mobile/Containers/Data/Application/1E945B52-E29D-4041-A489-1AA1B11BB960/Library/Caches

获取tmp路径

NSString *tmp = NSTemporaryDirectory();
NSLog(@"tmp:%@", tmp);

控制台输出:

2015-07-22 00:46:07.846 iOSStrongDemo[1632:557537] tmp:/private/var/mobile/Containers/Data/Application/4BE02307-1CC5-47E8-BEA8-CEBB7ED5A402/tmp/

以上是iOS开发中获取沙盒路径的方法,也许还有更好的获取方法等待我们去发现。后面我们还会讲到关于在沙盒里进行读写文件操作。

//

//  Boss.h

#import <Foundation/Foundation.h>

@interface Boss : NSObject<NSCoding>

@property (nonatomic, retain) NSString *name;

@property (nonatomic, retain) NSString *gender;

@property (nonatomic, assign) NSInteger number;

@property (nonatomic, assign) NSInteger phone;

@end

//

//  Boss.m

#import "Boss.h"

@implementation Boss

- (void)encodeWithCoder:(NSCoder *)aCoder{

//编码的方法, 本质上是把分布在内存不同位置的数据集合起来生成一个NSData

[aCoder encodeObject:self.name forKey:@"name"];

[aCoder encodeObject:self.gender forKey:@"gender"];

[aCoder encodeInteger:self.number forKey:@"number"];

[aCoder encodeInteger:self.phone forKey:@"phone"];

}

- (id)initWithCoder:(NSCoder *)aDecoder{

//解码方法, 本质上是把NSData数据按照编码的key 一个个读取出来  重新给一个新的对象赋值的过程

self = [super init];

if (self) {

self.name = [aDecoder decodeObjectForKey:@"name"];

self.gender = [aDecoder decodeObjectForKey:@"gender"];

self.number = [aDecoder decodeIntegerForKey:@"number"];

self.phone = [aDecoder decodeIntegerForKey:@"phone"];

}

return self;

}

- (void)dealloc{

[_gender release];

[_name release];

[super dealloc];

}

@end

#import "MainViewController.h"

#import "Boss.h"

@interface MainViewController ()

@end

@implementation MainViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view.

self.view.backgroundColor = [UIColor whiteColor];

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

//沙盒中的文件夹

//1.Documents:文档文件夹,保存用户的数据,最好不要保存体积很大的文件

//2.Caches:缓存文件夹,应用程序的缓存内容(图片/数据/视频/音频....)

//3.Preferences:偏好设置文件夹,给开发者保存数据使用

//4.tmp:临时文件夹,

//把简单对象写入本地

//一 .字符串写入本地

NSString *str = @"你好";

// 创建一个文件路径

// 获取Documents文件夹得路径

//参数1: 要找哪个文件夹得路径

//参数2; 寻找范围

//参数3: 是不是绝对路径

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

//拼接一个文件名, 生成一个文件路径

NSString *strPath  =[docPath stringByAppendingFormat:@"/aaa.txt"];

//参数1;文件路径

//参数2:对写入过程进行线程保护

//参数3:编码形式

[str writeToFile:strPath atomically:YES encoding:NSUTF8StringEncoding error:nil];

NSLog(@"文件路径: %@", strPath);

NSString *str1 = [NSString stringWithContentsOfFile:strPath encoding:NSUTF8StringEncoding error:nil];

NSLog(@"*****%@", str1);

//二. 数组写入本地

NSArray *arr = @[@"张家玮", @"王威武"];

NSString *arrPath = [docPath stringByAppendingPathComponent:@"arr.plist"];

[arr writeToFile:arrPath atomically:YES];

//三. 字典写入本地

NSDictionary *dic = @{@"key":@"value", @"key1":@"value1"};

NSString *dicPath = [docPath stringByAppendingPathComponent:@"dic.xml"];

[dic writeToFile:dicPath atomically:YES];

//根据路径读取数据

NSArray *readArr = [NSArray arrayWithContentsOfFile:arrPath];

NSLog(@"%@", readArr);

//四. 复杂对象写入本地

//自己创建的类产生的对象,叫复杂对象

Boss *boss = [[Boss alloc] init];

boss.name = @"张家玮";

boss.gender = @"unknown";

boss.number = 2;

boss.phone = 120;

NSString *bossPath = [docPath stringByAppendingPathComponent:@"boss.suibian"];

//归档类:负责把一个对象, 写入本地/生成NSData

[NSKeyedArchiver archiveRootObject:boss toFile:bossPath];

//反归档类: 负责读取本地的数据, 产生一个新的对象

Boss *newBoss = [NSKeyedUnarchiver unarchiveObjectWithFile:bossPath];

NSLog(@"%@", newBoss.name);

}

iOS开发之沙盒机制(SandBox)相关推荐

  1. iOS开发:沙盒机制以及利用沙盒存储字符串、数组、字典等数据

    iOS开发:沙盒机制以及利用沙盒存储字符串.数组.字典等数据 1.初识沙盒:(1).存储在内存中的数据,程序关闭,内存释放,数据就会丢失,这种数据是临时的.要想数据永久保存,将数据保存成文件,存储到程 ...

  2. iOS 开发之沙盒机制 文件操作 (NSFielManager)

    原文链接:http://www.jianshu.com/p/349855b5a8ae iOS APP 可以在自己的沙盒里读写文件,但是,不可以访问其他 APP 的沙盒.每一个 APP 都是一个信息孤岛 ...

  3. Mac 开发(一) 苹果沙盒机制sandbox 简介

    文章目录 Mac 开发(一) 苹果沙盒机制sandbox简介 1 Mac sandbox简介 1.1 关于应用程序沙盒 1.2 为啥要用沙盒机制 2 沙盒原理 3 xcode中开启沙盒权限 3.1 X ...

  4. IOS沙盒机制(SandBox)

    IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容.所有的非代码文件都保存在这个地方,比如图片.声音.属性列表和文本文件 ...

  5. Mac 开发(一) 苹果沙盒机制sandbox简介

    Mac 开发(一) 苹果沙盒机制sandbox简介 孔雨露正在上传-重新上传取消 2020年06月07日 16:41 ·  阅读 7332 @[TOC] Mac 开发(一) 苹果沙盒机制sandbox ...

  6. (0051)iOS开发之沙盒(sandbox)机制和文件操作(一)

    1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. ...

  7. macOS - Cocoa开发之沙盒机制及访问Sandbox之外的文件

    原文地址:http://www.skyfox.org/cocoa-macos-sandbox.html iOS默认并且只能读写对应的沙盒目录. OSX自从10.6系统开始引入沙盒机制,规定发布到Mac ...

  8. ios沙箱软件_iOS 开发之沙盒机制

    1.iOS 沙盒机制简介 沙盒也叫沙箱,英文standbox,其原理是通过重定向技术,把程序生成和修改的文件定向到自身文件夹中.在沙盒机制下,每个程序之间的文件夹不能互相访问.iOS系统为了保证系统安 ...

  9. iOS开发 清空沙盒路径下的缓存数据

    引言: 移动应用在处理网络资源时,一般都会做离线缓存处理,其中以图片缓存最为典型,其中很流行的离线缓存框架为 SDWebImage . 但是,离线缓存会占用手机存储空间,所以缓存清理功能基本成为资讯. ...

最新文章

  1. 7.Mongodb复制(副本集)
  2. Winform判断一个窗口是否以模态化方式打开
  3. 浅谈主动学习(Active Learning)
  4. Mpg123源代码详解
  5. pip更换源 windows10_Conda及Pip换源处理
  6. 聚类结果不好怎么办_使用bert-serving生成词向量并聚类可视化
  7. 私活利器,docker快速部署node.js应用
  8. 如何在电脑上截屏_如何在电脑上截图?教你6种常用的截图方法,总有你不知道的...
  9. 写一个类Army,代表一支军队,这个类有一个属性Weapon数组w(用来存储该军队所拥有的所有武器), 该类还提供一个构造方法,在构造方法里通过传一个int类型的参数来限定该类所能拥有
  10. 造成OOM的原因有哪几种?
  11. 天公不作美 SpaceX再次推迟星链卫星发射
  12. qtplaintextedit如何删除内容_数据库中的数据如何进行批量修改
  13. RHEL7及CentOS7的语言、字符编码、键盘映射、X11布局设置(localectl)-系统管理(1)...
  14. 邮件中html格式转换,如何在宏中将邮件格式更改为html?
  15. 将静态html网页部署至华为云
  16. CEMAPI实战攻略(二)——建立与短信信箱的连接
  17. 知识分享:数据分析的6大基本步骤
  18. java forward怎么用_java中forward是什么
  19. base64编码图片替换url图片
  20. 京东大数据,为什么这么牛?

热门文章

  1. 澳大利亚兽医伏特加酒当点滴救活给中毒小狗
  2. Java到底能不能使用异常来控制流程
  3. System源码浅析- initializeSystemClass(initProperties)
  4. Ubuntu18.04重启后无法进入图形化界面
  5. Java-使用集合存储快递的信息
  6. office2016 下载直通车
  7. Effective-Java 谨慎使用流并行
  8. VSCode下载很慢解决方法
  9. 信息系统项目管理师教程(第3版)- OSI七层模型TCP/IP四层模型对应网络协议
  10. 快来给你的Hexo博客招募亿只live2d看板娘吧(๑•̀ㅂ•́)و✧