我为什么不喜欢 CoreData

 

我一直不喜欢 Core Data,以前不太敢明目张胆地这么表达,现在收集到越来越多相关的信息,所以给大家分享一下,我为什么不喜欢 Core Data。

Core Data 太复杂

在今年刚刚结束的 GMTC 大会(http://gmtc.geekbang.org/)上,来自澳洲的李剑做了题为《iOS 遗留系统上的架构重构》的演讲,其中就提到 Core Data 给他们 500 万用户带来了 300 万次崩溃。我想任何产品都是不能接受这样的崩溃率的。

这 300 万次崩溃是 Core Data 的问题吗?可能也不是。在现场我没有看到具体的代码细节,我更觉得这可能是 Core Data 在使用中的各种坑,需要大家注意避免的。但是 Core Data 的坑是如此之多,使得像李剑这样的资深 iOS 开发者也不得不考虑将其直接替换掉。一个好的技术框架应该是不容易出现使用错误的,所以从这个角度讲,Core Data 本身的设计就是不好的。

Core Data 学习成本高

很多人觉得 Core Data 简单易学,我听了简直觉得自己的智商得到了 1 万点的伤害。反正我学习 Core Data 那阵子,Core Data 的各种概念着实让我郁闷了好久。在 OhMyStar 的作者 yu 的博客(http://www.iiiyu.com/2016/01/19/CoreData-VS-Realm/)上,yu 这么写道:

CoreData 是一个博大精深的技术,不要妄想几天之内可以用的很溜。
CoreData 是一个博大精深的技术,不要妄想几天之内可以用的很溜。
CoreData 是一个博大精深的技术,不要妄想几天之内可以用的很溜。

如果没有足够的时间和精力去接入 Core Data。 那选型的时候应当慎重考虑。

我想那些觉得 Core Data 很简单的人,可能更多时候是自己学了一点皮毛,就以为懂了全部吧。反正我是学不会 Core Data。

Core Data 的收益并不大

如果一门技术方案学习成本高,那么我们有动力继续学习的它的唯一理由就是:它的收益也非常大。但是,Core Data 在各种性能测试中,表现出
来的收益是相当差的。在这一点上,Realm 是最喜欢拿来说事的,拿查阅来说,Core Data 的性能是 FMDB 的六分之一不到,Realm 的十分之一不到。


Core Data 带来的另外的特性:例如可视化的编辑界面,关联关系的创建,数据库升级的支持,我个人觉得都不是非常大的收益。相对它带来的麻烦,这些收益微不足道。

Core Data 的这层抽像没必要

其实 Core Data 是构建在 SQLite 之上,对数据存储层进行了进一步的抽象。而我个人认为,对于一个计算机专业的人员来说,掌握 SQL 就像掌握 BASIC 一样容易,关系型数据库实在太容易理解了,完全没有必要在这上面再做一层抽像,带来额外的理解成本。

所以我更喜欢用 FMDB,它只是将 SQLite 的一些方法进行了 Objective-C 语言更加友好的调用封装,除此之外,你就完全是在操作一个 SQLite 数据库。

总结

使用复杂,学习复杂,坑多,收益小成本大,基本没有意义的抽象,我们还有什么理由继续学习和使用 Core Data ?

哦,对了,我也不喜欢  Realm,有机会下次再说它。

对于我来说,FMDB 以及构建在 FMDB 上的简单的 Key-Value 存储就足够了。我之前在 GitHub 开源过一个简单的基于 FMDB 的 KeyValue 存储(https://github.com/yuantiku/YTKKeyValueStore),感兴趣的可以翻翻。

我为什么不喜欢 CoreData的更多相关文章

  1. iOS CoreData 增删改查详解

    最近在学习CoreData, 因为项目开发中需要,特意学习和整理了一下,整理出来方便以后使用和同行借鉴.目前开发使用的Swift语言开发的项目.所以整理出来的是Swift版本,OC我就放弃了. 虽然S ...

  2. MagicalRecord,一个简化CoreData操作的工具库

    简介 项目主页:https://github.com/magicalpanda/MagicalRecord 实例下载:https://github.com/ios122/MagicalRecord 在 ...

  3. CoreData学习-最好的一片文章

    CoreData学习-最好的一片文章 分类: IOS重新上路2014-05-25 18:00 1937人阅读 评论(0) 收藏 举报   目录(?)[+]   写的很好的一篇教程,我什么时候能写出这么 ...

  4. Swift基础之CoreData的使用

    以前使用过OC版本的CoreData应该很好理解Swift方式,所以这里简单的展示一下,增删改查的方法使用,同时给大家说一下创建步骤,方便大家的使用,转载请注明出处,谢谢~ 步骤一:创建一个Swift ...

  5. iOS CoreData 开发

    新年新气象,曾经的妹子结婚了,而光棍的我决定书写博客~ 废话结束. 本人不爱使用第三方的东东,喜欢原汁原味的官方版本,本次带来CoreData数据存储篇~ 创建应用

  6. iOS CoreData 介绍和使用(以及一些注意事项)

    iOS CoreData介绍和使用(以及一些注意事项) 最近花了一点时间整理了一下CoreData,对于经常使用SQLite的我来说,用这个真的有点用不惯,个人觉得实在是没发现什么亮点,不喜勿喷啊.不 ...

  7. iOS CoreData介绍和使用(以及一些注意事项)

    iOS CoreData介绍和使用(以及一些注意事项) 最近花了一点时间整理了一下CoreData,对于经常使用SQLite的我来说,用这个真的有点用不惯,个人觉得实在是没发现什么亮点,不喜勿喷啊.不 ...

  8. CoreData遇见iCloud的那些坑

    尽管苹果把iCloud与CoreData之间的完美配合吹的天花乱坠,但在iOS7之前,想用iCloud同步CoreData数据简直就是噩梦,苹果自己也承认了之前的诸多bug和不稳定性,这让苹果不得不重 ...

  9. Linq表达式、Lambda表达式你更喜欢哪个?

    什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...

随机推荐

  1. springboot elk实时日志搭建

    https://blog.csdn.net/yy756127197/article/details/78873310 基本的上的过程如这篇博客,logback的配置文件和依赖不太一样 具体见源码其中的 ...

  2. Java-克隆一个对象

    如可方便的克隆一个对象 package com.tj; public class MyClass implements Cloneable { public Object clone() { Clon ...

  3. mac finder中添加自定义边栏

    想在finder中添加自定义边栏,操作如图所示: 选中边栏中任意边栏项,右键-在上层文件夹中显示,然后创建新的文件夹,将该文件夹拖到边栏中即可.

  4. Leetcode 397.整数替换

    整数替换 给定一个正整数 n,你可以做如下操作: 1. 如果 n 是偶数,则用 n / 2替换 n.2. 如果 n 是奇数,则可以用 n + 1或n - 1替换 n.n 变为 1 所需的最小替换次数是 ...

  5. Understanding performance, load and stress testing

    What are performance, load and stress testing? Performance testing, load testing and stress testing ...

  6. Mychael原创题 洛谷T23923 Mychaelの水题 【题解】

    原题链接 题目大意: 有来自三个地区的人各a,b,c位,他们排成了一排.请问有多少种不同类型的排法,使得相邻的人都来自不同的地区 \(a,b,c<=200\) 答案取模 题解 弱弱的标程解法 设 ...

  7. 能量项链(codevs 1154)

    题目描述 Description 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子 ...

  8. SHoj 420 购买装备

    购买装备 发布时间: 2017年7月9日 18:17   最后更新: 2017年7月9日 21:05   时间限制: 1000ms   内存限制: 128M 描述 最近盛大的一款游戏传奇世界极其火爆. ...

  9. ElasticSearch 多索引

    1.用逗号将索引隔开,如: $ curl -XPOST http://localhost:9200/aaa,website/_search/ { "took": 1, " ...

  10. CSS参数介绍

    原文发布时间为:2008-08-03 -- 来源于本人的百度文章 [由搬家工具导入] 行高       line-height: 16px 宽度       (具体位置)-width: 16px 文字 ...