【iOS开发-3】sandbox沙盒介绍以及如何取得沙盒里面各文件的路径,图片导入方式和图片路径获取

其实每个APP的程序都是单独的一个文件夹,每个APP之间相互之间独立,所以它们的文件夹也是独立的,这个文件夹就是沙盒。沙盒好处,安全。坏处,程序之间彼此共享数据较为困难。

(1)如何找到应用程序的沙盒源文件?

一般沙盒源文件都存放在~/Library/Application Support/iPhone Simulator/版本号/Applications/的文件夹中,但是这个Library(中文名叫资源库)文件夹是隐藏的。所以需要方法才能点击进去:在Finder中按CMD+SHIFT+G,然后再前往的框中输入~/Library,也就是直接前往,而不是通过点击前往。

当然也是可以用终端一直cd进去,注意有的目录名有两个单词中间空格前面要加 \ 转义,如cd ./Library/Application\ Support/iPhone\ Simulator/

后面选择模拟的版本,然后进入Application,里面都是应用程序,当然是用哈希码命名,里面有4个文件:

Documents、Library、tmp和hello.app,存放永久和临时数据的,这就是每个沙盒里面的主要文件。

(2)如何用代码获得沙盒里面的文件路径?

注明:NSBundle就是获取.app文件里面资源的一种方式。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //获取整个程序所在目录
    NSString *homePath=NSHomeDirectory();
    NSLog(@"%@",homePath);
    //获取.app文件目录
    NSString *appPath=[[NSBundle mainBundle]bundlePath];
    NSLog(@"%@",appPath);
    //Documents目录
    NSArray *arr1=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSLog(@"%@",[arr1 objectAtIndex:0]);
    //Library目录
    NSArray *arr2=NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
    NSLog(@"%@",[arr2 objectAtIndex:0]);
    //Caches目录,在Library下面
    NSArray *arr3=NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSLog(@"%@",[arr3 objectAtIndex:0]);
    //tmp目录
    NSString *tmpPath=NSTemporaryDirectory();
    NSLog(@"%@",tmpPath);
    //用整个程序目录加上tmp就拼凑出tmp目录,其他目录都可这样完成
    NSString *tmpPath_1=[homePath stringByAppendingPathComponent:@"tmp"];
    NSLog(@"%@",tmpPath_1);
    // Override point for customization after application launch.
    return YES;
}

结果:

2014-09-23 21:05:58.966 hello[7763:546804] /Users/Andy/Library/Developer/CoreSimulator/Devices/64EDA842-5B0C-448D-BF2B-B063D09B60CB/data/Containers/Data/Application/08972B0F-5ECF-42B2-934B-892E8E3F7F6D
2014-09-23 21:05:58.966 hello[7763:546804] /Users/Andy/Library/Developer/CoreSimulator/Devices/64EDA842-5B0C-448D-BF2B-B063D09B60CB/data/Containers/Bundle/Application/E7D6885C-9CC1-461D-867C-8D0DA5AF183A/hello.app
2014-09-23 21:05:58.967 hello[7763:546804] /Users/Andy/Library/Developer/CoreSimulator/Devices/64EDA842-5B0C-448D-BF2B-B063D09B60CB/data/Containers/Data/Application/08972B0F-5ECF-42B2-934B-892E8E3F7F6D/Documents
2014-09-23 21:05:58.967 hello[7763:546804] /Users/Andy/Library/Developer/CoreSimulator/Devices/64EDA842-5B0C-448D-BF2B-B063D09B60CB/data/Containers/Data/Application/08972B0F-5ECF-42B2-934B-892E8E3F7F6D/Library
2014-09-23 21:05:58.967 hello[7763:546804] /Users/Andy/Library/Developer/CoreSimulator/Devices/64EDA842-5B0C-448D-BF2B-B063D09B60CB/data/Containers/Data/Application/08972B0F-5ECF-42B2-934B-892E8E3F7F6D/Library/Caches
2014-09-23 21:05:58.967 hello[7763:546804] /Users/Andy/Library/Developer/CoreSimulator/Devices/64EDA842-5B0C-448D-BF2B-B063D09B60CB/data/Containers/Data/Application/08972B0F-5ECF-42B2-934B-892E8E3F7F6D/tmp/
2014-09-23 21:05:58.967 hello[7763:546804] /Users/Andy/Library/Developer/CoreSimulator/Devices/64EDA842-5B0C-448D-BF2B-B063D09B60CB/data/Containers/Data/Application/08972B0F-5ECF-42B2-934B-892E8E3F7F6D/tmp

(3)导入图片的方式以及如何获取路径

我们往程序中导入一个img文件夹或者一张图片时有两种方式:Creat groups和Creat folder reference,前者表示导入进来的图片都在.app(它其实是哥文件夹)中,列示在左侧的img文件夹只是用来分组而不是真正的目录;而后者表示不仅把图片导入进来,还把img目录导入进来,即.app下有个img文件夹,里面存放的时图片。

我们看到如下获取图片路径都用到NSBundle,其实因为都是在.app文件夹中,而NSBundle就是获取.app里资源的,所以在强化记忆一遍。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //Create groups方式,图片直接在.app里,以下两种方式相同
    NSString *path1=[[NSBundle mainBundle]pathForResource:@"1" ofType:@"png"];
    NSString *path2=[[NSBundle mainBundle]pathForResource:@"1.png" ofType:nil];
    NSLog(@"%@,%@",path1,path2);

    //Create folder reference方式,图片在img里,以下三种方式相同
    NSString *path3=[[NSBundle mainBundle]pathForResource:@"1" ofType:@"png" inDirectory:@"img"];
    NSString *path4=[[NSBundle mainBundle]pathForResource:@"1.png" ofType:nil inDirectory:@"img"];
    NSString *path5=[[NSBundle mainBundle]pathForResource:@"img/1.png" ofType:nil inDirectory:nil];
    NSLog(@"%@,%@,%@",path3,path4,path5);
    // Override point for customization after application launch.
    return YES;
}
时间: 2024-10-05 05:11:58

【iOS开发-3】sandbox沙盒介绍以及如何取得沙盒里面各文件的路径,图片导入方式和图片路径获取的相关文章

【转】 iOS开发数据库篇—SQLite简单介绍

开始学SQLite啦, 原文: http://www.cnblogs.com/wendingding/p/3868893.html iOS开发数据库篇—SQLite简单介绍 一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1)归档:NSCodeing.NSKeyedArchiver (2)偏好设置:NSUserDefaults (3)Plist存储:writeToFile 提示:上述三种方

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 2015-04-05 15:25 2482人阅读 评论(1) 收藏 举报开源框架 图像: 1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作.      下载:https://github.com/mwaterfall/MWPhotoBrowser目前比较活跃的社区仍旧是Github,

iOS开发-常用第三方开源框架介绍

iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作. 下载:https://github.com/mwaterfall/MWPhotoBrowser 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下G

iOS开发拓展篇-XMPP简单介绍

iOS开发拓展篇-XMPP简单介绍 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容 有许多的IM系统,如AOL IM.Yahoo IM. MSN以及QQ,它们最大的区别在于各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议 协议用来说明信息在网络上如何传输,如果有了统一的传输协议,那么应当可以实现各个IM之间的直接通讯,为了创建即时通讯的统一标准,目前已

iOS开发多线程篇—多线程简单介绍

iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过“活动监视器”可以查看Mac系统中所开启的进程 2.什么是线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 比如使用酷狗播放音乐.使用迅雷下载电影,都需要在线程中执行 3.线程

iOS开发UI篇-UIWindow简单介绍

iOS开发UI篇—UIWindow简单介绍 一.简单介绍 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了 一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow.也就说,没有UIWindow,就看不见任何UI界面 补充:UIWindow是创建的第一个视图控件(创建的第一个

iOS开发数据库篇—FMDB简单介绍

iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码 对比苹果自带的Core Data框架,更加轻量级和灵活 提供了多线程安全的数据库操作方法,有效地防止数据混乱 3.FMDB的github地址 https://github.com/ccgus/fmdb 二.核心类 FMDB有三个主要的类 (1)FMDa

ios开发UI基础—Kvc简单介绍

一.KVC简单介绍 KVC key valued coding 键值编码 KVC通过键值间接编码 补充: 与KVC相对的时KVO,即key valued observer 键值观察.监听某一个模型的属性,只要模型属性的值一变化就通知你. 二.使用KVC 1.KVC基本使用介绍 (1)代码示例: 新建一个命令行项目,用以演示KVC的用法 完成之后为项目添加一个Person类. 为Person类添加两个属性(name和age),注意这两个属性的类型. 1 #import <Foundation/Fo

文顶顶 iOS开发UI篇—Kvc简单介绍

ios开发UI篇—Kvc简单介绍 一.KVC简单介绍 KVC key valued coding 键值编码 KVC通过键值间接编码 补充: 与KVC相对的时KVO,即key valued observer 键值观察.监听某一个模型的属性,只要模型属性的值一变化就通知你. 二.使用KVC 1.KVC基本使用介绍 (1)代码示例: 新建一个命令行项目,用以演示KVC的用法 完成之后为项目添加一个Person类. 为Person类添加两个属性(name和age),注意这两个属性的类型. 1 #impo