iOS数据持久化方案

栏目: IOS · 发布时间: 5年前

内容简介:数据持久化是iOS开发中必不可少的一项技能。因为开发中我们多会涉及到数据持久化几种方式的一览图:

技术由来

数据持久化是iOS开发中必不可少的一项技能。因为开发中我们多会涉及到 用户信息存储文件存储应用内容缓存 中的一个或者几个场景。

数据持久化的几种方式

  • NSUserDefaults
  • plist
  • keychain(钥匙串)
  • 归档
  • 沙盒
  • 数据库

数据持久化几种方式的一览图:

iOS数据持久化方案

1.NSUserDefaults

NSUserDefaults用于存储 用户的偏好设置用户信息 ,如用户名,是否自动登录,字体大小等.

数据自动保存在 沙盒的Libarary/Preference s目录下.

NSUserDefaults将输入的数据储存在.plist格式的文件下,这种存储方式就决定了它的安全性几乎为0,所以不建议存储一些敏感信息如:用户密码,token,加密私钥等!

它能存储的数据类型为: NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL.

不支持自定义对象的存储.

使用注意点:

    1. NSUserDefaults存储的 数据都是不可变的,想将可变数据存入需要先转为不可变才可以存储 .
    1. NSUserDefaults是定时把缓存中的数据写入磁盘的,而不是即时写入,为了防止在写完NSUserDefaults后程序退出导致的数据丢失,可以在写入数据后 使用synchronize强制立即将数据写入磁盘 .

2.plist

属性列表文件 ,全名是Property List,这种文件的扩展名为.plist,因此,通常被叫做plist文件。 它是一种用来存储串行化后的对象的文件 ,用于存储程序中经常用到且数据量小而不经常改动的数据。

可以存储的类型: NSNumber,NSString,NSDate,NSData ,NSArray,NSDictionary,BOOL .

不支持自定义对象的存储.

使用注意点:

如果需要存储自定义类型的数据需要先进行序列化!

3.Keychain(钥匙串)

用于 本地重要数据的存储 ,将数据加密后存储在本地更安全.如: 密码,秘钥,序列号 等.当你删除APP后Keychain存储的数据不会删除,所以在重装App后,Keychain里的数据还能使用。从ios 3.0开始,跨程序分享keychain变得可行而NSUserDefaults存储的数据会随着APP而删掉.

使用keychain时苹果官方已经为我们封装好了文件 KeychainItemWrapper ,引入即可使用.当然也可是使用其他优秀的第三方的封装,比如 ssKeychain

keychain的使用方法

4.归档(NSKeyedArchiver)

归档是iOS开发中数据存储常用的技巧, 归档可以直接将对象储存成文件,把文件读取成对象

相对于plist或者userdefault形式,归档可以存储的数据类型更加多样,并且可以存取自定义对象。 对象归档的文件是保密的 ,在磁盘上无法查看文件中的内容,更加安全。

遵守NSCoding协议,并实现该协议中的两个方法。如果是继承,则子类一定要重写那两个方法。因为子类在存取的时候,会去子类中去找调用的方法,没找到那么它就去父类中找,所以最后保存和读取的时候新增加的属性会被忽略。需要先调用父类的方法,先初始化父类的,再初始化子类的。

保存数据的文件的后缀名可以随意命名。

存储类型 安全性 文件名后缀 数据量大小 应用场景
NSUserDefaults 不安全 plist 用户偏好设置,用户名
plist 不安全 plist 不经常改动
keychain 安全 密码、秘钥、序列号
归档 安全 任意 缓存

5.沙盒

持久化在Document目录下,一般存储非机密数据 。当App中涉及到电子书阅读、听音乐、看视频、刷图片列表等时,推荐使用沙盒存储。因为这可以极大的节约用户流量,而且也增强了app的体验效果.

Application:存放程序源文件,上架前经过数字签名,上架后不可修改。

Documents: 保存应运行时生成的需要持久化的数据, iTunes同步设备时会备份该目录 。例如,游戏应用可将游戏存档保存在该目录。

tmp: 保存应运行时所需的临时数据,使⽤完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。 iTunes同步设备时不会备份该目录

Library/Caches: 保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的非重要数据,比如网络数据缓存存储到Caches下。

Library/Preference: 保存应用的所有偏好设置,如iOS的Settings(设置) 应会在该目录中查找应⽤的设置信息。 iTunes同步设备时会备份该目录

6.数据库

存储数据量较大的数据,一般使用数据库来存储。如: FMDBCoreDataRealmWCDB

6.1 FMDB

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

6.2 CoreData

Core Data是iOS5之后才出现的一个框架,它提供了 对象-关系映射(ORM)的功能 ,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,我们不需要编写任何 SQL 语句.但是直接操作CoreData显的不是那么容易,所以我多数的时候会使用 MagicRecord 来实现.MagicRecord是对CoreData的二次封装,使用起来简单操作方便.

6.3 Realm

6.4 WCDB

WCDB是微信移动端开源的数据库组件。

WCDB的使用介绍

WCDB的详细介绍

WCDB 的GitHub传送门

写在最后

本文主要是对iOS开发过程中使用到的 数据持久化方案 的一个归纳整理,有些其实我自己也没有具体使用过,但是附上了相应的链接,有需要的同学可以具体的去学习。

参考: http://www.cocoachina.com/ios...


以上所述就是小编给大家介绍的《iOS数据持久化方案》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

剑指Offer

剑指Offer

何海涛 / 电子工业出版社 / 2012-1 / 45.00元

《剑指Offer:名企面试官精讲典型编程题》剖析了50个典型的程序员面试题,从基础知识、代码质量、解题思路、优化效率和综合能力五个方面系统整理了影响面试的5个要点。全书分为7章,主要包括面试的流程,讨论面试流程中每一环节需要注意的问题;面试需要的基础知识,从编程语言、数据结构及算法三方面总结了程序员面试的知识点;高质量的代码,讨论影响代码质量的3个要素(规范性、完整性和鲁棒性),强调高质量的代码除......一起来看看 《剑指Offer》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试