服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - 举例详解iOS开发过程中的沙盒机制与文件

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

2020-12-24 15:14TommyYaphetS IOS

这篇文章主要介绍了举例详解iOS开发过程中的沙盒机制与文件,示例代码为传统的Obejective-C,需要的朋友可以参考下

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>


现在能看到资源库文件夹了。
举例详解iOS开发过程中的沙盒机制与文件
打开资源库后找到/application support/iphone simulator/文件夹。这里面就是模拟器的各个程序的沙盒目录了。
举例详解iOS开发过程中的沙盒机制与文件
方法2、这种方法更方便,在finder上点->前往  然后按住"option"键,就会出现"资源库",其他同上

 

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

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

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

几个常用的代码示例:
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]; 

延伸 · 阅读

精彩推荐
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01