core data
core data 基于model-view-controller(mvc)模式下,为创建分解的cocoa应用程序提供了一个灵活和强大的数据模型框架。
core data可以使你以图形界面的方式快速的定义app的数据模型,同时在你的代码中容易获取到它。core data提供了基础结构去处理常用的功能,例如保存,恢复,撤销和重做,允许你在app中继续创建新的任务。在使用core data的时候,你不用安装额外的数据库系统,因为core data使用内置的sqlite数据库。
core data提供了一个通用的数据管理解决方案来处理那些所有需要数据模型的app(或大或小)。app使用core data来管理数据对象是很多的益处。
苹果的图形用户界面编译器-interface builder(IB),提供了对core data controller对象的预构建,从而来减少app的用户界面和它的数据模型之间的粘滞代码。在使用core data的时候你不需要考虑sql的语法问题,也不需要管理相关的逻辑树去追踪用户的行为,更不用建立新的永久机制。当你写你app的用户界面到它的core data模型的时候,它已经为你把所有的东西都做好了。
core data将你app的模型层放入到一组定义在内存中的数据对象。core data会追踪这些对象的改变,同时可以根据需要做相反的改变,例如用户执行撤销命令。当core data在对你app数据的改变进行保存的时候,core data会把这些数据归档,并永久性保存。它保存的数据在一些常规的文件,你可以在Finder中可以进行管理,用spotlight进行搜索,备份到cd,和email给朋友或者家人。
在使用core data框架的时候,你可以创建一个管理对象的模型,该模型提供了对模型对象的抽象定义,这也就是我们所知道的entities,它可以在我们的程序中使用。
core data是一个实体-关系模型,该模型是使用Xcode的数据模型设计工具来定义的,对数据实体以及他们的关系提供了丰富的环境。
sqlite
mac os x中sqlite库,它是一个轻量级功能强大的关系数据引擎,也很容易嵌入到应用程序。可以在多个平台使用,sqlite是一个轻量级的嵌入式sql数据库编程。与core data框架不同的是,sqlite是使用程序式的,sql的主要的API来直接操作数据表。
fmdb
FMDB框架其实只是一层很薄的封装,主要的类也就两个:FMDatabase和FMResultSet。在使用fmdb的时候还需要导入libsqlite3.0.dylib。
core data允许用户使用代表实体和实体间关系的高层对象来操作数据。它也可以管理串行化的数据,提供对象生存期管理与object_graph 管理,包括存储。Core Data直接与Sqlite交互,避免开发者使用原本的SQL语句.
上面的三种,都是在什么情况下使用呢?有些人肯定是根据自己使用某项技术的时间来决定,例如以前没用过core data,在编写ios程序的时候还是使用自己比较拿手的sqlite,或者可能会考虑到在使用coredata自己还要花费额外的时候去学习。
但是仔细想一想,core data是苹果自己弄的框架,它其实还是和sqlite进行交互的,只是在交互的时候或者处理数据的时候进行了很多的优化,core data可以缩小你的代码量,而且core data已经优化过很多个版本,还提供了出色的安全性和错误处理之外,还提供了对任何竞争性方案的最好的内存可扩展性。换句话说就是,你可能花费了很长时间为某个问题进行优化精心制作了一个方案,但是在性能上的优势和core data相比,还是相差深远的。
另外就是core data与Mac OS X的集成非常的好,core data也和IB进行了结合,允许你创建用户界面,这样可以帮助你缩短应用程序的设计,实施以及调试周期。
所以在编写程序的时候尽量使用core data,这样才是最优的选择。只有在Core Data is available on iOS
至于sqlite和fmdb的使用情况,这个看个人喜好了,个人觉得没什么标准。fmdb就是对sqlite的封装,使用起来有方便的接口,没那么麻烦而已。