当前位置: 首页 > 编程笔记 >

举例详解iOS开发过程中的沙盒机制与文件

金兴朝
2023-03-14
本文向大家介绍举例详解iOS开发过程中的沙盒机制与文件,包括了举例详解iOS开发过程中的沙盒机制与文件的使用技巧和注意事项,需要的朋友参考一下

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

  • 每个应用程序都有自己的存储空间
  • 应用程序不能翻过自己的围墙去访问别的存储空间的内容

打开模拟器沙盒目录
方法1、可以设置显示隐藏文件,然后在Finder下直接打开。设置查看隐藏文件的方法如下:打开终端,输入命名
<p class="p1">显示Mac隐藏文件的命令:

defaults write com.apple.finder AppleShowAllFiles -bool true</p><p class="p1">

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

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

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

方法2、这种方法更方便,在Finder上点->前往  然后按住"option"键,就会出现"资源库",其他同上

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

iTunes在与iPhone同步时,备份所有的Documents和Library文件。
iPhone在重启时,会丢弃所有的tmp文件。
这是上面提到的三个目录 :Documents、Library、 tmp

几个常用的代码示例:
1、获取程序的Home目录 


NSString *homeDirectory = NSHomeDirectory();    

NSLog(@"path:%@", homeDirectory); 
  
 
2、获取document目录 

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

NSString *path = [paths objectAtIndex:0];    

NSLog(@"path:%@", path);  
  
 
3、获取Cache目录 

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

NSString *path = [paths objectAtIndex:0];    

NSLog(@"%@", path);    

 
4、获取Library目录 

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

NSString *path = [paths objectAtIndex:0];    

NSLog(@"%@", path);  
 
 
5、获取Tmp目录 

NSString *tmpDir = NSTemporaryDirectory();    

 NSLog(@"%@", tmpDir);   

 
6、写入文件 

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

    NSString *docDir = [paths objectAtIndex:0];    

    if (!docDir) {    

        NSLog(@"Documents 目录未找到");            

    }    

    NSArray *array = [[NSArray alloc] initWithObjects:@"内容",@"content",nil];    

    NSString *filePath = [docDir stringByAppendingPathComponent:@"testFile.txt"];    

    [array writeToFile:filePath atomically:YES];  

 
7、写入文件 

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

    NSString *docDir = [paths objectAtIndex:0];    

    NSString *filePath = [docDir stringByAppendingPathComponent:@"testFile.txt"];    

    NSArray *array = [[NSArray alloc]initWithContentsOfFile:filePath];    

    NSLog(@"%@", array);  

8、判断一个文件是否存在,传入全路径(fileExistsAtPath)


// 创建文件管理器  

NSFileManager * fileManager = [NSFileManager defaultManager];  

  

NSString * documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];  

NSString * filePath = [documents stringByAppendingPathComponent:@"test"];  

  

    // 判断一个文件是否存在,传入全路径  

    if ([fileManager fileExistsAtPath:filePath]) {  

        NSLog(@"it is exit");  

    }  

9、在Documents里创建目录


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

   NSString *documentsDirectory = [paths objectAtIndex:0];    

   NSLog(@"documentsDirectory%@",documentsDirectory);    

   NSFileManager *fileManager = [NSFileManager defaultManager];    

   NSString *testDirectory = [documentsDirectory stringByAppendingPathComponent:@"test"];    

   // 创建目录  

   [fileManager createDirectoryAtPath:testDirectory withIntermediateDirectories:YES attributes:nil error:nil]; 

10、在目录下创建文件


NSString *testPath = [testDirectory stringByAppendingPathComponent:@"test00.txt"];    

NSString *testPath2 = [testDirectory stringByAppendingPathComponent:@"test22.txt"];    

NSString *testPath3 = [testDirectory stringByAppendingPathComponent:@"test33.txt"];    

  

  

NSString *string = @"写入内容,write String";  

[fileManager createFileAtPath:testPath contents:[string  dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];  

[fileManager createFileAtPath:testPath2 contents:[string  dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];  

[fileManager createFileAtPath:testPath3 contents:[string  dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];  

11、获取目录列里所有文件
两种方法获取:subpathsOfDirectoryAtPath 和subpathsAtPath


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

NSString *documentsDirectory = [paths objectAtIndex:0];    

NSLog(@"documentsDirectory%@",documentsDirectory);    

NSFileManager *fileManage = [NSFileManager defaultManager];    

NSString *myDirectory = [documentsDirectory stringByAppendingPathComponent:@"test"];    

NSArray *file = [fileManage subpathsOfDirectoryAtPath: myDirectory error:nil];   

NSLog(@"%@",file);    

NSArray *files = [fileManage subpathsAtPath: myDirectory ];   

NSLog(@"%@",files);  

12、fileManager使用操作当前目录


//创建文件管理器  

    NSFileManager *fileManager = [NSFileManager defaultManager];  

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

    NSString *documentsDirectory = [paths objectAtIndex:0];  

    //更改到待操作的目录下  

    [fileManager changeCurrentDirectoryPath:[documentsDirectory stringByExpandingTildeInPath]];  

    //创建文件fileName文件名称,contents文件的内容,如果开始没有内容可以设置为nil,attributes文件的属性,初始为nil  

    NSString * fileName = @"testFileNSFileManager.txt";  

    NSArray *array = [[NSArray alloc] initWithObjects:@"hello world",@"hello world1", @"hello world2",nil];  

    [fileManager createFileAtPath:fileName contents:array attributes:nil];  


13、删除文件

[fileManager removeItemAtPath:fileName error:nil];  

 类似资料:
  • MIP 以浏览体验与加载速度为优先考量点,因此在组件开发的时候,MIP 只开放了部分原生 JS 供组件开发者使用,以尽量避免组件开发出有悖 MIP 站点体验的组件。这个实现部分开放原生 JS API 的机制就是 MIP 的加载机制。 部分开放的 JS API MIP 鼓励使用 JS 进行计算,进行逻辑实现等等。因此这类工具型 API、数据结构对象等等具有完全的功能,比如 Math.*、Array、

  • 本文向大家介绍iOS开发系列--通知与消息机制详解,包括了iOS开发系列--通知与消息机制详解的使用技巧和注意事项,需要的朋友参考一下 概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情。iOS中通知机制又叫消息机制,其包括两类:一类是本地通知;另一类是推送通知,也叫远程通知。两种通知在iOS中的表现一

  • 本文向大家介绍实例详解IOS开发之UIWebView,包括了实例详解IOS开发之UIWebView的使用技巧和注意事项,需要的朋友参考一下 iOS开发之UIWebView 是本文要介绍的内容,UIWebView是iOS sdk中一个最常用的控件。是内置的浏览器控件,我们可以用它来浏览网页、打开文档等等。这篇文章我将使用这个控件,做一个简易的浏览器。如下图: 我们创建一个Window-based A

  • 本文向大家介绍举例讲解iOS开发中拖动视图的实现,包括了举例讲解iOS开发中拖动视图的实现的使用技巧和注意事项,需要的朋友参考一下 预备知识 iOS处理屏幕上的触摸动作,主要涉及到以下几个方法: 从方法的命名可以清晰的看出该方法何时被调用,最后一个比较特殊。touchesCancelled:WithEvent:在Cocoa Touch必须响应持续触摸事件的系统中断时调用。 我们只要重写这些方法,来

  • Chromium的一个关键安全特性是,进程可以在沙盒中执行。 沙盒通过限制对大多数系统资源的访问来减少恶意代码可能造成的伤害 — 沙盒化的进程只能自由使用CPU周期和内存。 为了执行需要额外权限的操作,沙盒处的进程通过专用通信渠道将任务下放给更大权限的进程。 在Chromium中,沙盒化应用于主进程以外的大多数进程。 其中包括渲染器进程,以及功能性进程,如音频服务、GPU 服务和网络服务。 查阅C

  • 本文向大家介绍IOS开发之JSON转PLIST实例详解,包括了IOS开发之JSON转PLIST实例详解的使用技巧和注意事项,需要的朋友参考一下  IOS JSON转PLIST   从xx.json文件中读取JSON数据,写入到xx.plist文件中,实现代码如下:      注:上面的代码片段必须在模拟器上运行     若将上面的代码片段改为如下:       注:在测试前已将city_provi