我为什么不喜欢 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表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...
随机推荐
- python的re模块常用方法
正则表达式模式 模式字符串使用特殊的语法来表示一个正则表达式: 字母和数字表示他们自身.一个正则表达式模式中的字母和数字匹配同样的字符串. 多数字母和数字前加一个反斜杠时会拥有不同的含义. 标点符号只 ...
- WPF Custom Command And Binding
using System; using System.Collections.Generic; using System.Windows.Input; namespace WPF.Commands { ...
- rabbitmq php 学习
参考文档:http://www.cnblogs.com/phpinfo/p/4104551...http://blog.csdn.net/historyasamirror/ar... 依赖包安装 yu ...
- 【Luogu】P3708Koishi的数字游戏(数论)
题目链接 考虑f(i)=i%1+i%2+i%3+.....+i%n f(i+1)=(i+1)%1+(i+1)%2+......+(i+1)%n 其中不是i+1的因数的部分在f(i+1)的地方都加了1. ...
- BZOJ 3757 苹果树 ——莫队算法
挺好的一道题目,怎么就没有版权了呢?大数据拍过了,精神AC.... 发现几种颜色这性质比较垃圾,不可加,莫队硬上. %了一发popoqqq大神的博客, 看了一波VFK关于糖果公园的博客, 又找了wjm ...
- 【2018.10.4】CXM笔记(图论)
.1.给你一个无向图,问这张图的最小割是否唯一.输出yes或no. 跑一边最大流,那么最小割的那些正向边一定满流(也就是过不了了).所以在残余网络上,从S到T和从T到S各广搜找一组最小割的边(即正向边 ...
- Linux(10):期中架构(2)--- NFS存储服务 & 实时同步
1. 共享存储服务概念: # NFS是Network File System的缩写,中文意思是网络文件系统, # 它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录. 2. ...
- 中国余数定理 1(codevs 3040)
题目描述 Description 摘自算法导论...... 找出第k个被3,5,7除的时候,余数为2,3,2的数: 输入描述 Input Description 一个数k. 输出描述 Output D ...
- formSubmit
精简代码: <form name='form0001' method="post"> .... <li id="view"><a ...
- MyBatis的参数,不能传入null
今天在调试的过程中发现一个bug,把传入的参数写到查询分析器中执行没有问题,但是在程序中执行就报错:org.springframework.jdbc.UncategorizedSQLException ...