我为什么不喜欢 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表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...
随机推荐
- idea 无法创建Scala class 选项解决办法汇总
原因一:没有添加scala sdk 解决:file=>project structure =>Global Libraries,添加scala-sdk: 没有scala sdk的可以去网上 ...
- ubuntu ssh连接服务器保持长时间不断
方法: ssh -o serveraliveinterval=60 username@ip
- 【软考2】Java语言的基本知识汇总
导读:现在对于java这一模块,还没有相应的项目经验,只是通过各种类型的资料,对java有一个面上的了解.现在,对此做一个罗列总结,在以后的学习过程中,逐步完善! 一.语言的发展 1.1,机器语言 在 ...
- [Kubernetes]Pod字段自动填充
PodPreset(Pod预设置)在Kubernetes v1.11以后出现,开发人员只需要提交一个基本的Pod YAML,Kubernetes就可以自动给对应的Pod对象加上运维人员设定好的其他必要 ...
- 新一代 javascript 模板引擎
artTemplate-3.0 新一代 javascript 模板引擎 <!DOCTYPE html> <html lang="en"> <head& ...
- 有大神告诉我为什么pymysql导入失败
import json import requests import pymysql url = 'https://xueqiu.com/v4/statuses/public_timeline_by_ ...
- BZOJ 4823 [Cqoi2017]老C的方块 ——网络流
lrd的题解:http://www.cnblogs.com/liu-runda/p/6695139.html 我还是太菜了.以后遇到这种题目应该分析分析性质的. 网络流复杂度真是$O(玄学)$ #in ...
- BZOJ [HNOI2015]亚瑟王 ——期望DP
发现每张卡牌最后起到作用只和是否打出去了有关. 而且每张牌打出去的概率和之前的牌打出去的情况有关. 所以我们按照牌的顺序进行DP. 然后记录$i$张牌中打出$j$张的概率,然后顺便统计答案. 直接对系 ...
- POJ 2154 Color ——Burnside引理
[题目分析] 数据范围有些大. 然后遍求欧拉函数,遍求和就好了,注意取模. [代码] #include <cstdio> #include <cstring> #include ...
- idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到
接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p/7712874.html 然后声明一点,下面打包的过程中,scope一直都是使用默认的范围 <!--用于 ...