浅谈iOS持久化存储——沙盒存储

浅谈云上攻防——国内首个对象存储攻防矩阵 前言 对象存储是云厂商提供的一种用来存储海量文件的分布式存储服务,可用于大规模存储非结构化数据。因为其具有高扩展性、低成本、可靠安全等优点,所以成为许多IT产业向云原生的开发和部署模式转变过程中不可或缺的一部分。 随着云上业务的蓬勃发展,作为云原生的一项重要能力,对象存储服务同样也面临着一系列的安全挑战。纵观近些年来的云安全漏洞,与对象存储服务相关的数据泄露事件比比皆是,以2017美国国防部承包商数据泄露为例: “Booz Allen Hamilton公司(提供情报与防御顾问服务)在使用亚马逊S3服务 阅读详情

前言

持久化是将程序数据的持久状态和瞬时状态转化的机制,通俗的讲,就是瞬时数据持久化为持久数据。持久化(Persistence),即把数据(如内存中的对象)保存到永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。

一、沙盒简介

沙盒(standbox),其原理是通过重定向技术(类似:Linux系统中重定向:系统把输出的数据写入到一个文件中的过程),把程序生成和修改的文件定向到自身文件夹中。在沙盒机制下,每个程序之间的文件夹不能相互访问。iOS系统为了保证系统安全采用的一种保护机制。(Android系统下,App之间可以相互共享数据)

iOS应用程序在安装时,会通过重定向的方式创建属于应用的沙盒文件。应用程序不能直接访问其他应用程序的沙盒文件,当应用程序需要向外部请求或者接收数据时,都需要经过权限认证,否则,无法获取数据。 此规则的一个例外是当应用程序使用公共系统接口访问用户的联系人或音乐等内容时。 在这些情况下,系统框架使用帮助应用程序来处理读取或修改适当数据存储所需的任何与文件相关的操作。

IOS中沙盒的文件目录

二、沙盒的使用详解

列出了sandbox目录中一些更重要的子目录,并描述了它们的预期用法。 此表还描述了每个子目录的任何其他访问限制,并指出目录的内容是否由iTunes和iCloud备份

directoryDescript
AppName.app这是应用程序的捆绑包。 该目录包含应用程序及其所有资源。

您无法写入此目录。 为防止篡改,bundle目录在安装时签名。 写入此目录会更改签名并阻止您的应用启动。 但是,您可以获得对应用程序包中存储的任何资源的只读访问权限。

iTunes或iCloud不会备份此目录的内容。 但是,iTunes确实执行从App Store购买的任何应用程序的初始同步。
Documents/使用此目录存储用户生成的内容。 该目录的内容可以通过文件共享提供给用户; 因此,他的目录应该只包含您可能希望向用户公开的文件。

该目录的内容由iTunes和iCloud备份。
Library/这是非用户数据文件的任何文件的顶级目录。 您通常将文件放在几个标准子目录之一中。 iOS应用程序通常使用Application Support和Caches子目录; 但是,您可以创建自定义子目录。

对于您不希望向用户公开的任何文件,请使用Library子目录。 您的应用不应将这些目录用于用户数据文件.

Library目录的内容(Caches子目录除外)由iTunes和iCloud备份。
tmp/使用此目录可以编写在应用程序启动之间不需要保留的临时文件。 您的应用程序应在不再需要时删除此目录中的文件; 但是,当您的应用未运行时,系统可能会清除此目录。

iTunes或iCloud不会备份此目录的内容。

在项目中最常用的沙盒目录是Libray,接下来详细介绍一下Library目录下的文件

Directory(目录)Usage(用法)
Application Support使用此目录存储除与用户文档关联的所有应用程序数据文件。 例如,您可以使用此目录存储应用程序创建的数据文件,配置文件,模板或应用程序管理的其他固定或可修改资源。 应用程序可能会使用此目录来存储最初包含在应用程序包中的可修改资源副本。 游戏可以使用该目录来存储用户购买并从服务器下载的新级别。

此目录中的所有内容都应放在自定义子目录中,该子目录的名称是应用程序包标识符或公司的名称。

在iOS中,此目录的内容由iTunes和iCloud备份。
Caches使用此目录可以编写应用程序可以轻松重新创建的任何特定于应用程序的支持文件。 您的应用程序通常负责管理此目录的内容以及根据需要添加和删除文件。

在iOS 2.2及更高版本中,iTunes或iCloud不会备份此目录的内容。 此外,系统会在完全恢复设备期间删除此目录中的文件。

在iOS 5.0及更高版本中,系统可能会在系统磁盘空间非常少的情况下删除Caches目录。 这在应用程序运行时永远不会发生。 但是,请注意从备份还原不一定是可以擦除Caches目录的唯一条件。

该目录一般用于网络请求下来的数据的存储
Preferences此目录包含特定于应用程序的首选项文件 您不应自己在此目录中创建文件。 而是使用NSUserDefaults类或CFPreferences API来获取和设置应用程序的首选项值。

在iOS中,此目录的内容由iTunes和iCloud备份。

三、文件,并发和线程安全

由于与文件相关的操作涉及与硬盘交互,因此与大多数其他操作相比较慢,因此iOS和macOS中的大多数与文件相关的接口都考虑了并发性。 有几种技术将异步操作合并到其设计中,而大多数其他技术可以从调度队列或辅助线程安全地执行。 下表出了本文档中讨论的一些关键技术,以及它们是否可以安全地从特定线程或任何线程使用。 有关任何接口功能的特定信息,请参阅该接口的参考文档。

Class/Technologynotes
NSFileManager对于大多数任务,可以安全地从多个后台线程同时使用默认的NSFileManager对象。 此规则的唯一例外是与文件管理器委托交互的任务。 将文件管理器对象与委托一起使用时,建议创建NSFileManager类的唯一实例,并将该委托与该实例一起使用。 然后,应该一次使用一个线程中的唯一实例。
Grand Central DispatchGCD本身可以安全地从任何线程使用。 但是,仍然负责以线程安全的方式编写块。
NSFileHandle, NSData, Cocoa streams用于读取和写入文件数据的大多数Foundation对象都可以在任何单个线程中使用,但不应同时从多个线程使用。
NSURL and NSString用于指定路径的不可变对象可以安全地从任何线程使用。 因为它们是不可变的,所以您也可以同时从多个线程中引用它们。 当然,这些对象的可变版本一次只能在一个线程中使用。

即使使用线程安全接口来操作文件,当多个线程或多个进程尝试对同一文件执行操作时,仍会出现问题。 尽管存在防止多个客户端同时修改文件的安全措施,但这些安全措施并不总能保证对文件的独占访问。 (也不应该尝试阻止其他进程访问共享文件。)要确保代码知道对共享文件所做的更改,请使用文件协调器来管理对这些文件的访问。
##四、沙盒的使用

1.获取沙盒路径方式
/**
     沙盒路径 方式一:
     直接使用系统定义的沙盒路径的方法获取沙盒路径
     */
    NSString *sandboxStr = NSHomeDirectory() ;
    NSString *tempStr = NSTemporaryDirectory();
    NSLog(@"\n-----SandBox: %@\n---temp%@",sandboxStr,tempStr);
    
    
    /**
     沙盒路径 方式二:
     获得沙盒路径方式二采用SearchPath的方式,NSSearchPathForDirectoriesInDomains是一种文件查找方式,查看沙盒的路径,其中NSSearchPathForDirectoriesInDomains方式有三个参数,三个参数的含义分别如下:
     参数1:搜索文件夹路径:NSSearchPathDirectory
     常用:NSDocumentDirectory、NSLibraryDirectory、NSCachesDirectory
     参数2:用户作用域下搜索
     参数3:true代表绝对路径(基本上用决定路径),false代表相对路径

     */
   
    NSArray *userNameArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, true);
    NSArray *localDomain2 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSLocalDomainMask, true);
    NSArray *networkNameArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSNetworkDomainMask, true);
    NSArray *sysArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSSystemDomainMask, true);
    NSArray *allDomains = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSAllDomainsMask, true);
    
    NSLog(@"-----userDocument:%@\n----locationMake:%@\n----networlMake:%@\n-----sysMake:%@\n----allDomain:%@\n",[userNameArr firstObject],[localDomain2 firstObject],[networkNameArr firstObject],[sysArr firstObject],[allDomains firstObject]);   

输出的结果:
-----SandBox: /Users/jack/Library/Developer/CoreSimulator/Devices/9BF127FB-B07B-4B61-995B-C0AF20EACC90/data/Containers/Data/Application/37409917-4796-488E-88ED-12D7DDD2B893
---temp/Users/jack/Library/Developer/CoreSimulator/Devices/9BF127FB-B07B-4B61-995B-C0AF20EACC90/data/Containers/Data/Application/37409917-4796-488E-88ED-12D7DDD2B893/tmp/
-----userDocument:/Users/jack/Library/Developer/CoreSimulator/Devices/9BF127FB-B07B-4B61-995B-C0AF20EACC90/data/Containers/Data/Application/37409917-4796-488E-88ED-12D7DDD2B893/Documents
----locationMake:(null)
----networlMake:(null)
-----sysMake:(null)
----allDomain:/Users/jack/Library/Developer/CoreSimulator/Devices/9BF127FB-B07B-4B61-995B-C0AF20EACC90/data/Containers/Data/Application/37409917-4796-488E-88ED-12D7DDD2B893/Documents
2.沙盒文件

上述打印出来的沙盒路径,通过“command+shift+g”查看沙盒的路径下的组成沙盒中文件目录

总结:

  1. IOS中数据持久化存储在沙盒中存储
  2. 沙盒每个路径的功能和作用
  3. 沙河路径的获取和创建文件存储到沙盒中
ios沙盒数据存储 介绍了NSManagerFile的几种常用的方法,简单易用,欢迎下载 立即下载

相关推荐

AndroidQ沙盒机制之分区存储适配

主要介绍了AndroidQ沙盒机制之分区存储适配,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

适配Android Q 分区存储/文件沙盒

Android Q新增了文件沙盒系统,在使用target 为29以上在Android Q的机器上任何/sdcard/*的明文方式都无法访问或者创建文件。

crrose的博客 3076

基于halcon的HSV颜色匹配实例

HSV颜色识别原图代码结果 原图 代码 dev_update_off () dev_close_window () *颜色数组 FuseColors := ['Orange','Red','Blue','Yellow','Green'] *画笔颜色数组 DisplayColors := ['coral','red','blue','goldenrod','forest green'] * HSV模型中H分量: Orange 10-30, Red 0-10,Blue 125-162,Yellow 3

qq_39467811的博客 3544

深入理解文件存储沙盒机制

存储访问三原则私有数据存沙盒共享数据用系统API用户数据必须显式授权Android开发四要素// 1. 正确声明权限// 2. 动态请求权限this,// 3. 使用MediaStore/SAF// 4. 配置FileProvider${

时小雨的专栏 1244

FIFO Generate IP核使用——FIFO写操作详解及Status Flags页配置

本文介绍了FIFO的写操作及Status Flags页的配置信息。

u011565038的博客 2283

Android 音频源码分析——AudioTrack设备选择

Android 音频源码分析——AndroidRecord录音(一) Android 音频源码分析——AndroidRecord录音(二) Android 音频源码分析——AndroidRecord音频数据传输流程 Android 音频源码分析——audioserver启动 Android 音频源码分析——AudioFlinger Android 音频源码分析——AudioTrack设备选择 基于Andorid9.0源码 以AudioTrack为例,梳理下输出设备选择流程。 音频设备选择的影响因素: Au

奋斗的菜鸟ing 3970

Android 11 从外部存储读取文件到应用沙盒存储

Android10之前,访问外部存储目录只需要Environment.getExternalStorageDirectory().getPath()获取根目录,再通过new File()的形式访问。 Android 10 开始,Google建议开发者使用文件选择访问外部存储,但是没有强制。 Android 11以上,开始强制不能再通过new File()的形式访问外部存储了。 效果: 1. FileHandlePresenter.java实现。 封装方法:发Intent拉起文件选择器 ..

xiaobaaidaba123的专栏 8771

txt经纬度批量转面要素(附自定义ArcGIS工具箱方法)

当涉及大量txt坐标文件需要转换成面要素的时候,逐步操作工作量较大。本文由需求出发,以ArcGIS10.2为例,采用python脚本自定义ArcGIS工具,实现批量操作的目的。

m0_59216200的博客 1818

iOS开发总结之沙盒存储

1.属性列表plist存储 plist只能存储 是写入到Documents目录下 且只能存储系统自带的一些常规的类, 也就是有writeToFile方法的对象才可以使用plist保存数据 字符串/字典/数据/NSNumber/NSData ... 自定义的对象不能保存到plist中 /** * 点击保存按钮 */ - (IBAction)sa

Walden_tinghou的专栏 1万+

英飞凌 AURIX TC3XX 系列单片机的链接文件

这篇介绍英飞凌 AURIX TC3XX 系列单片机的链接文件,主要是针对使用 SOTA 功能如何修改链接文件,完整地实现 SOTA 功能

大橙子的博客 4385

小论文/大论文必备 | RT-DETR目标检测、数据集增强 | 引入多种数据集增强方法,支持图像和标签同步扩充增强,助力小论文和大论文实验涨点策略,平均提升模型mAP约1-2个百分点

RT-DETR目标检测数据增强策略研究 ,本文针对RT-DETR目标检测模型提出9种数据增强方法,包括几何变换(水平/垂直翻转、中心裁剪)、光照调整(亮度、对比度)和噪声添加(高斯/椒盐噪声)等。所有增强操作均保持图像与标签同步变换,确保训练数据的准确性。实验表明,该策略可提升模型mAP 1-2个百分点,对小目标检测效果尤为显著。文中提供了完整的Python实现代码,支持批量处理图像和标签文件,并详细说明了各增强方法的功能特点。该方法通过提升数据多样性,有效增强了模型在复杂场景下的鲁棒性和泛化能力。

Ai缝合怪、助力小伙伴高效发论文 460

Android 分区存储

在 Android 11(API 30)及更高的版本中,如果申请了 MANAGE_EXTERNAL_STORAGE 权限,通常不需要再显示申请 WRITE_EXTERNAL_STORAGE 和 READ_EXTERNAL_STORAGE 权限,因为 MANAGE_EXTERNAL_STORAGE 权限已经允许应用全面的访问共享存储空间(包括读写权限)。从 Android 10 开始,对共享存储的读写权限变得更加严格,开发者可以选择是否使用分区存储,Android 11 中强制使用了分区存储。

xingyu19911016的博客 2712

从 SAP BTP trial 到第一个 CPI iFlow 的实操路线图

本文介绍了如何从零开始学习SAP CPI(现称SAP Integration Suite中的Cloud Integration能力)。主要内容包括:1)明确学习边界,建议使用SAP BTP trial账号进行个人练习,注意90天有效期限制;2)理解SAP BTP账号模型层级结构(Global Account→Subaccount→Space);3)详细说明申请trial账号流程,推荐选择Singapore区域以避免兼容问题;4)指导如何检查Entitlements和Quotas,强调应专注于SAP Inte

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 166

ios HTML 持久化存储,浅谈iOS持久化存储——沙盒存储

前言持久化是将程序数据的持久状态和瞬时状态转化的机制,通俗的讲,就是瞬时数据持久化为持久数据。持久化(Persistence),即把数据(如内存中的对象)保存到永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。一、沙盒简介沙盒(standbox),其原理是通过重定向技术(类似:Linux系统中重定向:系统把输出的数据写入到一...

weixin_35223575的博客 476

【AI大模型应用开发】【LangChain系列】实战案例6:利用大模型进行文本总结的方法探索,文本Token超限怎么办?

假设有一组文档(PDF、Notion页面、客户问题等),你想要总结内容。可以利用大模型来帮你。今天来系统看下利用大模型来对文本进行总结的方法,以LangChain的使用为例。

同学小张的博客 3749

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

浅谈:iOS编程之初级数据持久化

什么是数据持久化: 数据的永久存储 为什么要做数据持久化: 存储在内存中的数据,程序关闭,内存释放,数据丢失。这种数据是临时的 数据持久化的本质: 数据保存成文本,存储到程序的沙盒中。 那么什么是沙盒 对于沙盒有以下几个说明: 每个应用程序位于文件系统的严格限制部分。 每个应用程序只能在为该程序创建的文件系统中读取文件 每个应用程序在iOS系统内都放在了统一的文件夹目录下

u010270320的专栏 332

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ios:数据持久化的几种方法浅谈

今天我们来聊聊ios的几种本地化持久化。我们知道常用的几种数据持久化的方式有 NSUserDefaults;write to file(直接写入本地);归解档(NSKeyedArchiver/NSKeyedUnarchiver);SQLITE;CoreData。。。今天我主要和大家聊聊前三种。 说到ios的本地化一定要说到沙盒机制。 所谓沙盒机制就是它规定了应用程序只能在为该应用创建的文件夹内

dlmyliyi的博客 515

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IOS之四种数据持久化方式

一、首先来说一下五种数据持久化方式的优缺点: 1. 属性列表     :   简单易用,但是只能适用于小数据量  2. 对象归档     :   对数据进行加密,自定义对象归档,保存的方式是序列化,只能适用于小数据量 3. NSUserDefaults :同步synchronize 应用程序内置(bundle)的一个plist文件里 4. SQLite          :

Mainning的专栏 2401

iOS中常用的持久化存储方式

浅谈APP中常使用的持久化存储方式,仅供初学者学习. /** * 写入文件 */ -(void)saveUserName:(NSString *)username password:(NSString *)password { [[NSUserDefaults standardUserDefaults] setObject:username forKey:@"us...

weixin_30396699的博客 91

浅谈iOS本地数据保存

iOS本地数据保存有多种方式,比如NSUserDefaults、归档、文件保存、数据库、CoreData、KeyChain(钥匙串)等多种方式。其中KeyChain(钥匙串)是保存到沙盒范围以外的地方,也就是与沙盒无关。 沙盒 每个iOS应用程序都有自己的独立目录,这个目录就是应用程序的沙盒。我们可以通过NSHomeDirectory()获取当前应用的家目录,也就是当前应用程序沙盒的根目录

cleven 710

FMDB——本地数据持久化浅谈

FMDB 本地数据存 sqlite

cuimingran的专栏 546

浅谈iOS需要掌握的技术点

鉴于很多人的简历中的技术点体现(很多朋友问我iOS需要知道注意哪些)! 技术点: 1.热更新 (及时解决线上问题) 2.runtime(json解析、数据越界、扩大button点击事件、拦截系统方法) 3.即时通讯 4.底层的封装 5.https兼容(单项验证、双向验证) 6.aso优化(用户留存、日活跃分析、关键词) 7.视图流畅的帧数 8.sdwebimage的实现...

aiqian1239的博客 397

localstorage存储大小_HTML5-本地存储浅谈

Web Storage是HTML5里面引入的一个类似于cookie的本地存储功能,可以用于客户端的本地存储sessionStorage && localStoragesessionStorage - 用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据,会话级别的存储。localStorage - 用于持久化的本地存储,除非主动删除数据,否则数据会一直存在...

weixin_39614874的博客 399

HTML5-本地存储浅谈

Web Storage是HTML5里面引入的一个类似于cookie的本地存储功能,可以用于客户端的本地存储 sessionStorage && localStorage sessionStorage - 用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据,会话级别的存储。 localStorage - 用于持久化的本地存储,除非主动删除数据,否则数据会一直存在 不同于cookie的4kb数据存储量 localStorage和sessionStorage均可.

weixin_52546522的博客 755

浅谈CoreData For IOS

1、简介 Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,我们不需要编写任何SQL语句,这个有点类似于著名的Hibernate持久化框架,不过功能肯定是没有Hibernate强大的。简单地用下图描述下它的作用:

Nick的专栏 510
上一篇: iOS CAAnimation核心动画
下一篇: 新的 CSS 攻击会导致 iOS 系统重启或 Mac 冻结
Flame_Dream
博客等级 码龄12年 35粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值