热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

IOS沙盒(sandbox)机制和文件操作

1、IOS沙盒机制(沙盒(sandbox)机制)IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,

1、IOS沙盒机制( 沙盒(sandbox)机制

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

 1.1、每个应用程序都有自己的存储空间 
 1.2、应用程序不能翻过自己的围墙去访问别的存储空间的内容 
 1.3、应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行。 
     通过这张图只能从表层上理解sandbox是一种安全体系,应用程序的所有操作都要通过这个体系来执行,其中核心内容是:sandbox对应用程序执行各种操作的权限限制。 


--------xode6 以下访问方法参考如下:----------

2、打开模拟器沙盒目录

下面看看模拟器的沙盒文件夹在mac电脑上的什么位置。

文件都在个人用户名文件夹下的一个隐藏文件夹里,中文叫资源库,他的目录其实是Library。

2.1 方法1、可以设置显示隐藏文件,然后在Finder下直接打开。设置查看隐藏文件的方法如下:打开终端,输入命名

  

显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true

隐藏Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false

输完单击Enter键,退出终端,重新启动Finder就可以了 重启Finder:鼠标单击窗口左上角的苹果标志-->强制退出-->Finder-->

现在能看到资源库文件夹了。

打开资源库后找到/Application Support/iPhone Simulator/文件夹。这里面就是模拟器的各个程序的沙盒目录了。

 

2.2 方法2、这种方法更方便,在Finder上点->前往->前往文件夹,输入/Users/username/Library/Application Support/iPhone Simulator/  前往。

username这里写你的用户名。

3、目录结构

默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp。 
Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下; 
Library:存储程序的默认设置或其它状态信息; 
tmp:提供一个即时创建临时文件的地方。 

iTunes在与iPhone同步时,备份所有的Documents和Library文件。 

iPhone在重启时,会丢弃所有的tmp文件。

    



-----------xcode6 以上版本 参考如下------------------------------------


默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp。因为应用的沙盒机制,应用只能在几个目录下读写文件
Documents:苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录
Library:存储程序的默认设置或其它状态信息;
Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除
tmp:提供一个即时创建临时文件的地方。


iTunes在与iPhone同步时,备份所有的Documents和Library文件。
iPhone在重启时,会丢弃所有的tmp文件。

参考代码可以使用:

//取得完整路径名

NSString *fileName = [plistPathstringByAppendingPathComponent:@"textdemo.plist"];

       NSLog(@"工程下fileName is %@",fileName);



1、创建项目Plistdemo


项目创建之后可以找到项目对应的plist文件,打开如下图所示:


在编辑器中显示类似与表格的形式,可以在plist上右键,用源码方式打开,就能看到plist文件的xml格式了。



2、创建plist文件。


按command +N快捷键创建,或者File —> New —> New File,选择Mac OS X下的Property List



创建plist文件名为plistdemo。



打开plistdemo文件,在空白出右键,右键选择Add row 添加数据,添加成功一条数据后,在这条数据上右键看到 value Type选择Dictionary。点加号添加这个Dictionary下的数据



创建完成之后用source code查看到plist文件是这样的:





	广东
	
		肇庆
		深圳
		广州
	
	四川
	
		南充
		绵阳
		成都
	



3、读取plist文件的数据 和 打印参考如下代码:

NSBundle *bundle = [NSBundle mainBundle];
        NSString *path = [bundle pathForResource:@"citys" ofType:@"plist"];
        //读取数据到Nsdictionary字典中
        NSDictionary *dictiOnary= [[NSDictionary alloc]initWithContentsOfFile:path];
        //NSLog(@"size is %d",[dictionary count]);
        
        NSArray *array = [dictionary allKeys];
        //循环输出字典得Data 数据
        for (id key in  dictionary) {
            NSArray *arrays = [dictionary objectForKey:key];
            for (int i =0; i <[arrays count]; i++) {
                NSLog(@"key:%d, value:%@",i,[arrays objectAtIndex:i]);
            }
        }
        
        //plist 文件得写操作
        NSMutableDictionary *data = [[NSMutableDictionary alloc]init];
        //添加数据
        [data setObject:@"one" forKey:@"1"];
        [data setObject:@"two" forKey:@"2"];
        [data setObject:@"there" forKey:@"3"];
        [data setObject:@"four" forKey:@"4"];
        //写入数据进沙盒
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *plistPath = [paths objectAtIndex:0];
        //取得完整路径名
        NSString *fileName = [plistPath stringByAppendingPathComponent:@"textdemo.plist"];
        NSLog(@"工程下fileName is %@",fileName);
        //创建并写入文件
        [data writeToFile:fileName atomically:YES];
        
        //检查是否写如
        NSMutableDictionary *writeData = [[NSMutableDictionary alloc]initWithContentsOfFile:fileName];
        NSLog(@"write data is%@",writeData);


当然控制台已经打印出来来哈


有关文件操作,先写到这里,更复杂的NSData或sqlite保存,以后用到,学到时再补充吧。



推荐阅读
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了预加载多个本地WebView相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Xcode离线安装帮助文档1.在线查看帮助文件:Xcode下查看帮助文件,菜单Help-DeveloperDocumentation在右上角搜索框中即可检索,但速度很慢 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • Python中sys模块的功能及用法详解
    本文详细介绍了Python中sys模块的功能及用法,包括对解释器参数和功能的访问、命令行参数列表、字节顺序指示符、编译模块名称等。同时还介绍了sys模块中的新功能和call_tracing函数的用法。推荐学习《Python教程》以深入了解。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
  • 2.2以下安装:1.打开终端,进入cocos2d-x引擎文件夹(ls列目录cd进入文件夹)2.执行sudo.install-templates-xcode. ... [详细]
  • iOS开发Debug和Release的理解
    2019独角兽企业重金招聘Python工程师标准参考:http:blog.csdn.netmad1989articledetails406580331&# ... [详细]
  • 在应用开发中少不了界面元素的布局、适配、自适应。之前苹果已经为我们提供了 AutoLayout 和 SizeClasses,方便我们实现页面的自适应弹性布局。但对于一些复杂的交互界 ... [详细]
  • iOS推送手机消息的技术背后的奥秘揭示
    作者:allenzzhao,腾讯IEG运营开发工程师消息推送我们几乎每天都会用到,但你知道iOS中的消息推送是如何实现的吗?本文将从推送权限申请,到本地和远程消息推送, ... [详细]
  • ios中级面试题(二)
    1.如何追踪app崩溃率,如何解决线上闪退当iOS设备上的App应用闪退时,操作系统会生成一个crash日志,保存在设备上。crash日志上有很多有用的信息,比如每个正在执行线程的 ... [详细]
  • 运行就报对我有效的解决方法是:把真机和模拟器需要的文件手动加入其中,具体请参考网络上提供的其他解决方 ... [详细]
author-avatar
mobiledu2502895137
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有