您的位置:首页 > 移动开发 > IOS开发

iOS开发10-iOS SandBox(沙盒或沙盘)介绍、路径获取

2015-10-24 21:55 417 查看

iOS开发10-iOS SandBox(沙盒或沙盘)介绍、路径获取

代码下载(Xcode7.0.1)

有问题请联系博主,邮箱:nathanlee1987@aliyun.com

1、沙盒路径的获取

"应用程序包": 这里面存放的是应用程序的源文件,包括资源文件和可执行文件。

NSString *path = [[NSBundle mainBundle] bundlePath];

NSLog(@"%@", path);

//1、获取沙盒根路径
NSString *sandbox=NSHomeDirectory();
NSLog(@"1、获取沙盒根路径=%@",sandbox);

//2、获取Documents路径-最常用的目录,iTunes同步该应用时会同步此文件夹中的内容,适合存储重要数据。
//程序运行中生成的文件,例如数据库。
//特点:这个文件夹中的内容会被上传,所以不适合放体积较大的文件,例如音频视频图片,如果放了视频音频,打包上传审核会被拒绝。
NSString * documents=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSLog(@"2、获取Documents路径=%@",documents);

//3、获取Caches路径(不会被上传),一般用于文件下载存储
<span style="font-family: Arial, Helvetica, sans-serif;">Library/Preferences: iTunes同步该应用时会同步此文件夹中的内容,通常保存应用的设置信息</span>
//Library//Preferences 不需要手动操作 -对手机进行默认设置,字体字号等
//Library//Caches缓存  长期保存 iTunes不会同步此文件夹,适合存储体积大,不需要备份的非重要数据。
NSString * Caches=NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
NSLog(@"3、获取Caches路径=%@",Caches);

//4、获取tmp路径:iTunes不会同步此文件夹,系统可能在应用没运行时就删除该目录下的文件,所以此目录适合保存应用中的一些临时文件,用完就删除。
NSString * tmp=NSTemporaryDirectory();
NSLog(@"4、获取tmp路径=%@",tmp);

//5、获取bundlePath路径
NSString *bundlepath= [[NSBundle mainBundle]bundlePath];
NSLog(@"5、获取bundlepath=%@", bundlepath);

//运行结果1
/*
2015-10-24 21:33:25.170 SandBox[5454:396935] 1、获取沙盒根路径=/Users/lining/Library/Developer/CoreSimulator/Devices/4BE9A476-F866-47D0-AA53-F4C3D57452F2/data/Containers/Data/Application/71E260C9-4F3D-49CA-9482-62949E2F7404
2015-10-24 21:33:25.170 SandBox[5454:396935] 2、获取Documents路径=/Users/lining/Library/Developer/CoreSimulator/Devices/4BE9A476-F866-47D0-AA53-F4C3D57452F2/data/Containers/Data/Application/71E260C9-4F3D-49CA-9482-62949E2F7404/Documents
2015-10-24 21:33:25.171 SandBox[5454:396935] 3、获取Caches路径=/Users/lining/Library/Developer/CoreSimulator/Devices/4BE9A476-F866-47D0-AA53-F4C3D57452F2/data/Containers/Data/Application/71E260C9-4F3D-49CA-9482-62949E2F7404/Library/Caches
2015-10-24 21:33:25.171 SandBox[5454:396935] 4、获取tmp路径=/Users/lining/Library/Developer/CoreSimulator/Devices/4BE9A476-F866-47D0-AA53-F4C3D57452F2/data/Containers/Data/Application/71E260C9-4F3D-49CA-9482-62949E2F7404/tmp/
2015-10-24 21:33:25.171 SandBox[5454:396935] 5、获取bundlepath=/Users/lining/Library/Developer/CoreSimulator/Devices/4BE9A476-F866-47D0-AA53-F4C3D57452F2/data/Containers/Bundle/Application/EDDB6D95-41A2-4B8A-A9D1-BB0B6EEE875F/SandBox.app

*/
//运行结果2
/*

2015-10-24 21:34:04.102 SandBox[5467:397522] 1、获取沙盒根路径=/Users/lining/Library/Developer/CoreSimulator/Devices/4BE9A476-F866-47D0-AA53-F4C3D57452F2/data/Containers/Data/Application/B1D5E3A8-F6B9-45A0-B305-2DC795A8DA02
2015-10-24 21:34:04.102 SandBox[5467:397522] 2、获取Documents路径=/Users/lining/Library/Developer/CoreSimulator/Devices/4BE9A476-F866-47D0-AA53-F4C3D57452F2/data/Containers/Data/Application/B1D5E3A8-F6B9-45A0-B305-2DC795A8DA02/Documents
2015-10-24 21:34:04.103 SandBox[5467:397522] 3、获取Caches路径=/Users/lining/Library/Developer/CoreSimulator/Devices/4BE9A476-F866-47D0-AA53-F4C3D57452F2/data/Containers/Data/Application/B1D5E3A8-F6B9-45A0-B305-2DC795A8DA02/Library/Caches
2015-10-24 21:34:04.103 SandBox[5467:397522] 4、获取tmp路径=/Users/lining/Library/Developer/CoreSimulator/Devices/4BE9A476-F866-47D0-AA53-F4C3D57452F2/data/Containers/Data/Application/B1D5E3A8-F6B9-45A0-B305-2DC795A8DA02/tmp/
2015-10-24 21:34:04.103 SandBox[5467:397522] 5、获取bundlepath=/Users/lining/Library/Developer/CoreSimulator/Devices/4BE9A476-F866-47D0-AA53-F4C3D57452F2/data/Containers/Bundle/Application/75160F05-07EB-4988-A2CF-7BB4A0C6DB69/SandBox.app

*/


2、iOS8后的变化

在iOS8之前,沙盒中的document、cache、tmp之后,下一次模拟器或真机无论怎样重启,这具体的路径是固定的了。在iOS8之后,苹果考虑到安全因素,应用每一次重启,沙盒路径都动态的发生了变化。iOS8沙盒的路径发生了变化,但是并不代表原来沙盒路径中的数据发生了变化;同时,也并不代表路径会越来越多。苹果会把旧路径中的数据转移到新路径中。旧路径也会被苹果毫无保留的删除,只保留最新的路径。

3、Bundle的使用

Bundle是一个内部结构按照标准规则组织的特殊目录,包含了程序会使用到的资源.这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-in)。iOS的应用都是通过bundle进行封装的,对应的bundle类型是Application类型。Finder会把这个bundle当做一个文件显示,因为这个bundle自身也是一个package,而Mac系统会把所有的package当做一个文件来对待,显示给用户,从而防止用户误操作导致程序文件损坏或丢失。很多资源文件加载大多是通过bundle来进行的了,从bundle进行文件加载实际就是通过应用自己所在的文件夹进行加载。在iOS8中,家路径和Bundle路径进行了分离,在模拟器中,Bundle包路径和Document
library所在的路径完全不一样了。

在项目上右键,add图片文件图片文件myPic.png。

使用bundle获取程序里的一张图片,并显示到View上。新建一个Single View Application,并在加入viewDidLoad方法里加入如下代码
//通过使用下面的方法得到程序的main bundle

NSBundle *mainBundle = [NSBundle mainBundle];

NSString *imagePath = [mainBundle pathForResource:@"myPic” ofType:@"png"];

NSLog(@"%@", imagePath);

UIImage *image = [[UIImage alloc]initWithContentsOfFile:imagePath];

UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

[self.view addSubview:imageView];

代码下载(Xcode7.0.1)

有问题请联系博主,邮箱:nathanlee1987@aliyun.com

著作权声明:本文由http://my.csdn.net/Nathan1987_原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: