关闭

iOS中的数据持久化

标签: ios
91人阅读 评论(0) 收藏 举报
分类:

本文由我们团队的王瑞华童鞋撰写。


数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。 数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。在iOS开发中,有很多种数据持久化方案,本文主要介绍 plist文件,NSKeyedArchiver,SQLite3,NSUserDefaults。

iOS的沙盒模型

iOS最为人所熟知的就是其沙盒模型,一个App的读写权限只限于自己的沙盒目录中。沙盒模型的好处有哪些?1. 安全,别的app无法修改你的程序。2. 保护隐私,别人app无法读取你的程序。3.便于系统管理,一个app产生的内容都包含在自己的沙盒中,便于系统管理。
iOS 沙盒目录结构如下

如果我们想获取上面某个目录的路径,应该如何实现呢?

对于最常用的Documents目录,iTunes同步该应用时会同步该文件夹内容,适合存放用户重要数据

Library/Caches:iTunes不会同步该文件夹

Library/Preferences: iTunes同步该应用时会同步此文件夹中的内容,通常保存应用的设置信息。

tmp:此目录适合保存应用中的一些临时文件,用完就删除。

NSFileManager

在实际项目开发中,我们一般会创建一个工具类来对app的文件进行管理。
NSFileManager 提供一个类方法获得一个单例。

下面是NSFileManager的常用方法

plist 文件

plist文件的实质为XML文件,很容易查看到文件数据类型。可以被plist文件序列话的类型只有以下几种:

  • NSArray, NSMutableArray
  • NSDictionary, NSMutableDictionary
  • NSData, NSMutableData
  • NSString, NSMutableString
  • NSNumber
  • NSDate

而在实际的项目中,我们一般是将NSDictionary或NSArray的对象保存到文件或者从文件读取成对象。NSDictionary和NSArray会直接写成plist文件。

序列化可以通过两种途径来进行

  • 使用数据对象自带方法
  • 使用NSPropertyListSerialization类

    UserDefault

    顾名思义,它就是一个用户的一些偏好设置。对于该部分,每一个app都要一个plist文件专门保存偏好设置数据。 plist文件名默认是程序Bundle identifier,扩展名为plist。除了程序自己的设置外,系统还有一些全局的或者其它的一些设置,也属于User Defaults的范畴,User Defaults的持久化数据都保存在 ~/Library/Preferences 目录中。NSUserDefaults 类来读写Preferences设置,而无需考虑文件位置等细节问题。NSUserDefaults 用起来和 NSDictionary 很相似,多了一个Domain的概念在里面。

    NSKeyedArchiver 归档

    归档在iOS中是另一种形式的序列化,只要遵循了NSCoding协议的对象都可以通过它实现序列化。

    遵从NSCoding协议
    NSCoding 协议声明了两个方法,这两个方法都是必须实现的。一个用于归档,一个用于解档。

    SQLite3

    由于本人对于数据库的操作一直采用FMDB库进行操作,一下就已该库操作为例。
    SQLite是无类型的。即不管你在创表时指定的字段类型是什么,存储是依然可以存储任意类型的数据。但为了良好的编程规范和增加可读性,一般都指定类型。一般分为:

    • integer : 整数 主键必须设置为该类型
    • real : 实数(浮点数)
    • text : 文本字符串
    • blob : 二进制数据,比如文件,图片之类的

      FMDB

      FMDB是iOS平台的SQLite数据库框架,FMDB以OC的方式封装了SQLite的C语言API。具有一下有点

    • 使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码
    • 对比苹果自带的Core Data框架,更加轻量级和灵活
    • 提供了多线程安全的数据库操作方法,有效地防止数据混乱

    核心类包括FMDatabase, FMResultSet, FMDatabaseQueue这三个类。

    对于数据库操作,谈论比较多的就是线程安全问题。不要让多个线程操作同一个库。为此,FMDB实现了一个FMDatabaseQueue类,以保证数据库的线程安全。

    以上内容为本人根据工作中涉及的知识点整理内容,如有侵权请与我联系。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:28148次
    • 积分:448
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:78篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论