美文网首页
数据持久化

数据持久化

作者: Da_Hao | 来源:发表于2018-01-18 11:47 被阅读0次

iOS中持久化方案有很多,例如:NSUserDefault、KeyChain、File,以及基于数据库的无数子方案。因此选择合适的方案很重要,要不然架构上面会很混乱

1、NSUserDefault

    一般来说,小规模数据,弱业务相关数据,都可以放到NSUserDefault里面,内容比较多的数据,强业务相关的数据就不太适合NSUserDefault了。这种方式简单方便。

    NSUserDefaults支持的数据类型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL. 如果想存储自定义对象,可以先把自定义对象转成NSData,然后再存储。存储路径是/Library/Preferences 下面

    注意:1>切记不要存储可变数据,例如NSMutableArray,可以变成NSArray再存储;

                2>NSUserDefaults是定时把缓存中的数据写入磁盘的,而不是即时写入,为了防止在写完NSUserDefaults后程序退出导致的数据丢失,可以在写入数据后使用synchronize强制立即将数据写入磁盘:[userDefault synchronize]

2、keychain

        Keychain是苹果提供的带有可逆加密的存储机制,普遍用在各种存密码的需求上。另外,由于App卸载只要系统不重装,Keychain中的数据依旧能够得到保留,以及可被iCloud同步的特性,大家都会在这里存储用户唯一标识串。所以有需要加密、需要存iCloud的敏感小数据,一般都会放在Keychain。

    Keychain采用的加密算法是:AES(高级密码标准,美国国家安全局使用的,iOS内部使用的也是这个),理论破解时间1万年(哈哈哈、、)

3、文件存储

        文件存储包括了Plist、archive、Stream等方式,一般结构化的数据或者需要方便查询的数据,都会以Plist的方式去持久化。Archive方式适合存储平时不太经常使用但很大量的数据,或者读取之后希望直接对象化的数据,因为Archive会将对象及其对象关系序列化,以至于读取数据的时候需要Decode很花时间,Decode的过程可以是解压,也可以是对象化,这个可以根据具体中的实现来决定。Stream就是一般的文件存储了,一般用来存存图片啊啥的,适用于比较经常使用,然而数据量又不算非常大的那种。

4、数据库存储

        数据库存储的话,花样就比较多了。苹果自带了一个Core Data,当然业界也有无数替代方案可选,在iOS领域用得多的就是:Core Data,sqlite、FMDB(封装sqlite)比较多了,另外还有一个新起的移动端数据库realm,盗了几张图对比一下吧(嘿嘿)

查询速度对比 遍历速度对比 插入速度对比

        看这几张图不难发现realm的性能确实不错,除了这个优点,还有简单易用,比CoreData和FMDB好用许多。这么好为什么不用呢,那是因为它也有很多缺点啊,举个栗子吧:据官方说会增加1MB左右的包大小(我感觉这个缺点挺严重的,为了增加点性能,其实这个性能只会在数据量很大的时候才会出现,移动端一般不会对大量数据进行增删改查,如果需要处理大量数据,一般会丢给服务器,又甩锅了。。)。当然有人会说,才1M,无所谓,现在用户流量那么多。

        数据库方案主要是为了便于增删改查,当数据有状态和类别的时候最好还是采用数据库方案比较好,而且尤其是当这些状态和类别都是强业务相关的时候,就更加要采用数据库方案了。因为你不可能通过文件系统遍历文件去甄别你需要获取的属于某个状态或类别的数据,这么做成本就太大了。当然,特别大量的数据也不适合直接存储数据库,比如图片或者文章这样的数据,一般来说,都是数据库存一个文件名,然后这个文件名指向的是某个图片或者文章的文件。

相关文章

  • Docker学习(13) 卷与持久化数据

    Docker学习(13) 卷与持久化数据 卷与持久化数据——简介 数据主要分为两种:持久化和非持久化。 持久化:就...

  • iOS本地数据持久化

    iOS本地数据持久化 iOS本地数据持久化

  • Redis-2 数据持久化及持久化配置

    一、数据持久化 开启持久化功能后,重启redis,数据会自动通过持久化文件恢复!! 1、redis持久化 – 两种...

  • 面试相关

    数据持久化 什么是持久化狭义的理解: “持久化”仅仅指把域对象永久保存到数据库中;广义的理解,“持久化”包括和数据...

  • GeekBand iOS开发高级进阶学习笔记(第四周)

    简易数据存储 数据持久化分为本体持久化和云端持久化本体持久化可以存在本地文件或数据库。云端可以存在iCloud,存...

  • iOS数据持久化

    Title: iOS数据持久化 ##数据持久化概念 数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型...

  • redis与memcache区别

    1、持久化 redis是支持持久化存储,宕机重启数据不会丢失,memcache重启后数据丢失 redis持久化的方...

  • iOS本地数据持久化

    转载自:CocoaChina - iOS本地数据持久化 本文内容:iOS本地数据持久化的几种类型iOS本地数据持久...

  • Android数据持久化的设计

    title: Android数据持久化 版 本 历 史 1. 数据持久化简介 1.1 数据持久化的需求 在网络异常...

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

    前言 持久化是将程序数据的持久状态和瞬时状态转化的机制,通俗的讲,就是瞬时数据持久化为持久数据。持久化(Persi...

网友评论

      本文标题:数据持久化

      本文链接:https://www.haomeiwen.com/subject/juiioxtx.html