文档章节

iOS开发之沙盒路径篇1

48度爱的等待
 48度爱的等待
发布于 2015/09/09 09:45
字数 864
阅读 30
收藏 0

一、沙盒(sandbox)

iOS的应用只能访问为该应用创建的区域,不可访问其他区域,应用的其他非代码文件都存在此目录下,包括图片,属性文件plist,bundle,nib文件等,这块区域称之为沙盒(sandBox)。

  1. 每个应用都有属于自己的存储空间,即沙盒

  2. 应用只能访问自己的沙盒,不可访问其他区域

  3. 如果应用需要进行文件操作,则必须将文件存放在沙盒中,尤其是数据库文件,在电脑上操作时,可以去访问,但是如果要装在真机上可以使用,必须将数据库文件拷贝至沙盒中。


出于安全的目的,应用程序只能将自己的数据和偏好设置写入到几个特定的位置上。当应用程序被安装到设备上时,系统会为其创建一个家目录,这个家目录就是应用程序的沙盒。


家目录下共有四个子目录:


Documents 目录:您应该将所有的应用程序数据文件写入到这个目录下。这个目录用于存储用户数据或其它应该定期备份的信息。

AppName.app 目录:这是应用程序的程序包目录,包含应用程序的本身。由于应用程序必须经过签名,所以您在运行时不能对这个目录中的内容进行修改,否则可能会使应用程序无法启动。

Library 目录:这个目录下有两个子目录:Caches 和 Preferences

    Preferences 目录包含应用程序的偏好设置文件。您不应该直接创建偏好设置文件,而是应该使用NSUserDefaults类来取得和设置应用程序的偏好

    Caches 目录用于存放应用程序专用的支持文件,保存应用程序再次启动过程中需要的信息。

tmp 目录:这个目录用于存放临时文件,保存应用程序再次启动过程中不需要的信息。


获取这些目录路径的方法:

//1,获取家目录路径的函数:

NSString *homeDir = NSHomeDirectory(); 


//2,获取Documents目录路径的方法:    

                //获取Documents文件夹1    

    NSString * documents1 = [NSString stringWithFormat:@"%@/Documents",sandBoxPath];

    NSLog(@"documents1===%@",documents1);


    

               //获取Documents文件夹2  用这个方法会自动给我们加一个/

    NSString * docuemts2 = [sandBoxPath stringByAppendingPathComponent:@"Documents"];

    NSLog(@"documenst2=====%@",docuemts2);


                //获取Documents文件夹3    

    //第一个参数,让你写你要找哪个文件

    //第二个参数,让你指定从哪个地方找你要找的文件

    //第三个参数,找到文件后是否展开

    NSArray *documetns3 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO);

  

    NSLog(@"documents3====%@",documetns3[0]);



//3,获取Caches目录路径的方法:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);

NSString *cachesDir = [paths objectAtIndex:0];


//4,获取tmp目录路径的方法:

NSString *tmpDir = NSTemporaryDirectory();


//5,获取应用程序程序包中资源文件路径的方法:

//例如获取程序包中一个图片资源(apple.png)路径的方法:

NSString *imagePath = [[NSBundlemainBundle]pathForResource:@"apple"ofType:@"png"];

UIImage *appleImage = [[UIImagealloc]initWithContentsOfFile:imagePath];

//代码中的mainBundle类方法用于返回一个代表应用程序包的对象。

 //找到library文件夹

    NSArray * library = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);

    NSLog(@"library=====%@",library);


  //找到Temp文件夹

    NSString *temp = NSTemporaryDirectory();

    NSLog(@"temp===%@",temp);


  

   

//    //找到系统资源文件

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

    NSLog(@"bundle=====%@",bundle);


//    //获取工程文件路径

    NSString * imagePath = [[NSBundle mainBundle] pathForResource:@"3" ofType:@"png"];

    NSLog(@"imagePath=====%@",imagePath);





© 著作权归作者所有

48度爱的等待
粉丝 0
博文 5
码字总数 19294
作品 0
周口
程序员
私信 提问
iOS开发技巧之查看模拟器沙盒文件

iOS开发技巧之查看模拟器沙盒文件 iOS开发中,在对数据库进行操作时,有时我们需要直观的查看数据库的内容,那么我们如何找到沙盒中的这个文件呢,步骤很简单: 1.点击Finder选项栏上的前往菜...

珲少
2015/07/19
2.1K
0
iOS应用存储数据的常用的方式之plist和归档

iOS应用创建的数据存储方式 plist文件,是XML属性的列表形式 归档(遵循协议) SQLite(需要自己写sql语句) Core Data 苹果对的一个封装 今天我们先来说说文件,需要知道一个概念 沙盒文件 每一个...

追逐iOS
04/20
0
0
一分钟越狱 iOS 11.4|世界顶级黑客大会 DEFCON 议题详解

雷锋网编者按:苹果公司在 macOS 和 iOS 中都采用了沙盒机制保护系统不受恶意软件的攻击。在世界著名的黑客大会 DEFCON 的这次演讲中,来自阿里安全的安全研究员分析了最新版的 iOS 中的沙盒...

李勤
2018/08/13
0
0
ios应用数据存储方式(XML属性列表-plist) - 转

一.ios应用常用的数据存储方式   1.plist(XML属性列表归档)   2.偏好设置   3.NSKeydeArchiver归档(存储自定义对象)   4.SQLite3(数据库,关系型数据库,不能直接存储对象,要编写一些数...

久依
2018/12/12
0
0
iOS Sandbox是个什么鬼?

在iOS平台上,每个app都有一个存储空间,用以存储照片、声音文件、文本、属性列表等,我们称之为沙盒。在沙盒里,app可以自己读写文件,但仅限于自己的沙盒,不可访问其他app沙盒,不可进行相...

小麦麦子
2015/07/20
479
1

没有更多内容

加载失败,请刷新页面

加载更多

uni app 零基础小白到项目实战

$emit 子组件传给父组件$ref 父组件操作子组件 公用模板 uni-app全局变量的几种实现方法 const websiteUrl = 'http'const now = Date.now || function() { return new Date().getTime......

达达前端小酒馆
16分钟前
4
0
Tomcat是如何实现异步Servlet的

前言 通过我之前的Tomcat系列文章,相信看我博客的同学对Tomcat应该有一个比较清晰的了解了,在前几篇博客我们讨论了Tomcat在SpringBoot框架中是如何启动的,讨论了Tomcat的内部组件是如何设...

木木匠
40分钟前
14
0
mysql中间件分享(Mysql-prxoy,Atlas,DBProxy,Amoeba,cobar,TDDL)

hello 各位小伙伴大家好,我是小栈君,这期我们分享关于mysql中间件的研究,也就是数据层的读写分离和负载均衡,希望能够在实际的应用中能够帮助到各位小伙伴。 下期我们将继续分享go语言的系...

IT干货栈
今天
10
0
OSChina 周一乱弹 —— 人生,还真是到处是意外

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享lil peep的单曲《High School》 《High School》- lil peep 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
611
10
Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部