iOS 数据持久化存储

本文介绍了iOS开发中的数据持久化存储,包括沙盒结构、常见存储方案(plist、偏好设置、NSKeyedArchiver、FMDB、CoreData)以及各自的使用场景。详细解析了沙盒目录的Document、Library/Caches、Library/Preference和temp子目录,并提供了获取这些路径的方法。此外,文章还讨论了plist文件存储、偏好设置以及归档和解档的原理与实践。
摘要由CSDN通过智能技术生成

在iOS开发中,所谓的数据持久化存储,就是将数据保存在硬盘中,这样即使我们的应用关闭后重启,仍然是可以继续访问之前保存的数据. 在iOS开发中,最常见的就是以下几种存储方案.

常见的几种存储方案
1, plist(属性列表)文件
2, Preference(偏好设置)
3, NSKetedArchiver(归档)
4, FMDB(基于SQLite3 封装的一套OC的API库)
5, CoreData

一、 沙盒结构介绍

首先需要了解一下Bundle和沙盒(sandbox)之间的区别:
Bundle: 应用程序在手机中的安装路径
sandbox(沙盒):专门来存储当前APP自己的数据的路径

  • 沙盒机制:在iOS中每个APP都拥有自己的沙盒,APP只能访问对应沙盒中存储的数据, iOS是不允许跨越沙盒去访问数据的,所有的数据都是保存在该沙盒的三个子目录下:

    Document
    Library(Library/Caches, Library/Preference)
    temp

    • Document: 一般在该目录下保存一些比较重要的数据,比如:游戏相关的数据, 当连接iTunes后会自动同步数据

      注意点: 如果将数据资源保存到该目录.上架可能会被拒绝,(解决方案:直接设置该文件夹不被iTunes备份),总之:不能保存从网上下载的数据,否则不能上架

    • Library: 存储应用设置或者状态信息等,在该目录下还有两个子目录:Caches和Preference

      Library/Caches: 存放缓存文件,iTunes不会备份,因此文件不会因APP退出而删除(一般使用SDWebImage的缓存资源都是保存到这来)
      Library/Preference: 保存应用的所有偏好设置,iOS的Setting(设置)会在该目录查找该应用的设置信息,iTunes会同步数据

    • temp: 临时文件, iTunes不会备份该文件夹中的数据, 这个文件夹中的数据,会因为应用的关闭而删除.
  • 如何获取到对应目录下的路径

    参数1: 指定搜索的路径名称:是个枚举值:
    NSDocumentDirectory: 表示在Document中寻找数据
    NSCachesDirectory: 表示在caches中寻找
    参数2: 也是个枚举值:
    NSUserDomainMask: 表示在用户的主目录
    NSLocalDomainMask: 表示在当前的机器
    NSNetworkDomainMask: 表示网络中可见的主机
    NSSystemDomainMask: 表示系统目录,不可修改
    NSAllDomainsMask: 表示所有
    参数3, 是否展开波浪线
    NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory(参数1), NSSearchPathDomainMask(参数2), BOOL(参数3))

//2.主目录
NSString *home = NSHomeDirectory();

//3.文档目录
//3.1拼接字符串
NSString *docDir1 = [NSString stringWithFormat:@"%@/%@",home,@"Documents"];

//3.2拼接路径(一般处理路径拼接建议使用此方法)
NSString *docDir2 = [home stringByAppendingPathComponent:@"Documents"];

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

//这个目录是在Library目录下的,需要自己手动创建文件夹(一般不会存在这个下面)
NSString *docError = [NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES) lastObject];

//4.缓存目录
NSString *cacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

//5.临时目录
NSString *tempDir = NSTemporaryDirectory();
  • 数据持久化存储的几种方式简单介绍
在iOS开发中,苹果提供了4中数据持久化方案供我们选择,分别是: 属性列表(plist), 数据归档(NSKeyedValueArchiver/NSUserDefaults), 数据库(splite)以及coreData.
 plist文件存储:
 plist是一种明文的轻量级存储方式,最常用的格式是XML格式,比如:新疆一个项目是,系统会提供一个info.plist文件,这种方式的安全性几乎为0,所提plist主要是用于存储少了并且不重要的数据. plist只能读取数组(NSArray)或者字典(NSDictonary).

 数据归档/序列化(NSKeyedArchiver):
 NSKeyedArchiver是一种轻量级存储的持久化方案,数据化归档时经过加密处理的,所以安全性远高于plist,数据归档可以存储一些复杂的对象,数据保存前会经过二进制处理.注意:使用这种方案是需要前提的, 使用前必须要遵守NSCoding协议并且实现协议中的两个方法.

 数据库(splite):
 splite是一个轻量级,跨平台的小型数据库,可移植性比较高,有着和MySpl几乎相同的数据库语句,以及无需服务器即可使用的优点:
 数据库的优点:
 1, 该方案可以存储大量的数据,存储和检索的速度非常快.
 2, 能对数据进行大量的聚合,这样比起使
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值