iOS开发10-iOS SandBox(沙盒或沙盘)介绍、路径获取
代码下载(Xcode7.0.1)
有问题请联系博主,邮箱:nathanlee1987@aliyun.com
有问题请联系博主,邮箱:nathanlee1987@aliyun.com
1、沙盒路径的获取
"应用程序包": 这里面存放的是应用程序的源文件,包括资源文件和可执行文件。
NSString *path = [[NSBundle mainBundle] bundlePath];
NSLog(@"%@", path);
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-62949E2F74042015-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/Documents2015-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/Caches2015-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-2DC795A8DA022015-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/Documents2015-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/Caches2015-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_原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢
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_原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢