我为什么不喜欢 CoreData
我为什么不喜欢 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的更多相关文章
- iOS CoreData 增删改查详解
最近在学习CoreData, 因为项目开发中需要,特意学习和整理了一下,整理出来方便以后使用和同行借鉴.目前开发使用的Swift语言开发的项目.所以整理出来的是Swift版本,OC我就放弃了. 虽然S ...
- MagicalRecord,一个简化CoreData操作的工具库
简介 项目主页:https://github.com/magicalpanda/MagicalRecord 实例下载:https://github.com/ios122/MagicalRecord 在 ...
- CoreData学习-最好的一片文章
CoreData学习-最好的一片文章 分类: IOS重新上路2014-05-25 18:00 1937人阅读 评论(0) 收藏 举报 目录(?)[+] 写的很好的一篇教程,我什么时候能写出这么 ...
- Swift基础之CoreData的使用
以前使用过OC版本的CoreData应该很好理解Swift方式,所以这里简单的展示一下,增删改查的方法使用,同时给大家说一下创建步骤,方便大家的使用,转载请注明出处,谢谢~ 步骤一:创建一个Swift ...
- iOS CoreData 开发
新年新气象,曾经的妹子结婚了,而光棍的我决定书写博客~ 废话结束. 本人不爱使用第三方的东东,喜欢原汁原味的官方版本,本次带来CoreData数据存储篇~ 创建应用
- iOS CoreData 介绍和使用(以及一些注意事项)
iOS CoreData介绍和使用(以及一些注意事项) 最近花了一点时间整理了一下CoreData,对于经常使用SQLite的我来说,用这个真的有点用不惯,个人觉得实在是没发现什么亮点,不喜勿喷啊.不 ...
- iOS CoreData介绍和使用(以及一些注意事项)
iOS CoreData介绍和使用(以及一些注意事项) 最近花了一点时间整理了一下CoreData,对于经常使用SQLite的我来说,用这个真的有点用不惯,个人觉得实在是没发现什么亮点,不喜勿喷啊.不 ...
- CoreData遇见iCloud的那些坑
尽管苹果把iCloud与CoreData之间的完美配合吹的天花乱坠,但在iOS7之前,想用iCloud同步CoreData数据简直就是噩梦,苹果自己也承认了之前的诸多bug和不稳定性,这让苹果不得不重 ...
- Linq表达式、Lambda表达式你更喜欢哪个?
什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...
随机推荐
- Eclipse截取android报错log
Eclipse截取android报错log: 1.前提条件:已安装eclipse 2. LogCat界面设置: Logcat是Android 编程中一个命令行工具,可以用于得到程序的 log 信息,可 ...
- 九度oj 题目1340:小A的计算器
题目描述: 以往的操作系统内部的数据表示都是二进制方式,小A新写了一个操作系统,系统内部的数据表示为26进制,其中0-25分别由a-z表示. 现在小A要在这个操作系统上实现一个计算器,这个计算器要能实 ...
- 洛谷3830 [SHOI2012]随机树 【概率dp】
题目 输入格式 输入仅有一行,包含两个正整数 q, n,分别表示问题编号以及叶结点的个数. 输出格式 输出仅有一行,包含一个实数 d,四舍五入精确到小数点后 6 位.如果 q = 1,则 d 表示叶结 ...
- spring之scope作用域
spring中,bean的作用域有五种类型:默认是单例模式, singleton prototype request session ...
- response.sendRedirect(location)与rd.forward()区别
在Java Web开发中,经常会用到跳转页面的方法,一般有下面两种方法. HttpServletResponse response = new HttpServletResponse(); respo ...
- C Looooops(poj 2115)
大致题意: 对于C的for(i=A ; i!=B ;i +=C)循环语句,问在k位存储系统中循环几次才会结束. 若在有限次内结束,则输出循环次数. 否则输出死循环. 解题思路: 题意不难理解,只是利用 ...
- android导入项目出错之解决办法
导入android源码后,基本都有错误,R.java也不会自动生成,因为是第一次导入工程,工程有错R.java就不会自动生成了,工程有错误,当然模拟器就不能启动,也就看不到效果.随后网上找各种解决方法 ...
- poj1149最大流经典构图神题
题意:n个顾客依次来买猪,有n个猪房,每个顾客每次可以开若干个房子,买完时,店主可以调整这位顾客 开的猪房里的猪,共m个猪房,每个猪房有若干猪,求最多能卖多少猪. 构图思想:顾客有先后,每个人想要的猪 ...
- Spark学习(三): 基本架构及原理
Apache Spark是一个围绕速度.易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和St ...
- 未能加载文件或程序集“System.EnterpriseServices, Version=4.0.0.0或2.0.0.0
未能加载文件或程序集“System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50 ...