
此文章说明的是,Core Data 提供的基本特性,以及妳为什么要使用这种技术。
Core Data框架为关于对象生命周期和对象图管理的常见任务(包括数据持久化)提供了通用而自动化的解决方案。它的特性包括:
•.变更跟踪和撤销功能支持。
Core Data提供了内置的撤销及重做功能处理,此功能不仅限于基本的文字编辑场景。
•.关系维护。
Core Data会管理变更的传播过程,包括维护不同对象之间的关系的一致性。
•.未来(Futures)(容错(faulting))。
Core Data可通过以懒惰策略加载对象的方法来降低妳的程序的内存占用。它还支持部分实质化的未来(partially materialized futures)以及写时复制数据共享(copy-on-write data sharing)。
•.自动验证属性的值。
Core Data的被管理对象(managed objects)扩展了标准的键-值(key-value)代码验证方法,它能确保单个的值在可接受的范围内,从而确保多个值的组合情况是有意义的。
•.模式(Schema)迁移。
处理妳的程序中的模式的变更是一件狠困难的事情,这一点对于开发难度和运行时资源管理难度都是成立的。Core Data的模式迁移工具使得这个处理模式变更的过程变得简单,并且在某些情况下还能让妳高效地进行就地的模式迁移。
•.可选地与程序的控制器层整合,以支持用户界面的数据同步。
Core Data在iOS 平台上提供咯NSFetchedResultsController 对象,而在 OS X 上可与可可绑定(Cocoa Bindings)整合起来。
•.完整、自动地支持键-值代码和键-值观察。
不但为属性(attributes)合成(synthesizing)了键-值代码和键-值观察风格的(compliant)访问方法,Core Data还为对多(to-many)关系合成了适当的集合访问方法。
•.对内存及用户界面中的数据进行分组、过滤和组织。
•.自动支持将对象储存在外部数据仓库中。
•.支持高端的查询语句编译。
妳不需要自己来手写结构化查询语言(SQL)语句,只需要将一个 NSPredicate 对象关联到一个获取请求(fetch request)上便可以创建复杂的查询条件了。NSPredicate支持基本函数(basic functions)、关联的子查询(correlated subqueries)以及其它更高端的结构化查询语言用法。靠着Core Data 的强大功能,它还支持:适当的统一码(Unicode)字符串、含有本地语言的字符串搜索、排序和正则表达式。
•.合并策略。
Core Data提供的内置的版本跟踪和乐观锁(optimistic locking),以支持自动化地解决多个写入者之间的冲突。
有一堆理由可以说明为什么妳应当使用Core Data。其中一种简单的量化的理由就是:使用了Core Data之后,按照代码行数来算,妳所编写的用来支持妳的程序中模型层的代码一般会减少50%到70%。这主要是因为上面所说过的那些特性—Core Data所提供的就是那些妳无需亲自实现的特性。进一步说,这些特性妳都无需亲自测试,并且无需亲自优化。
Core Data拥有一个成熟的代码基础,它的质量是由单元测试来确保的,它每天被多种多样的程序中数计百万计的用户使用。在多次的新版本发布中,这个框架已被高度优化。它利用了那些一般不会在应用程序级别的代码中出现的模型和运行时特性。而且,除了提供优秀的案例性和错误处理能力之外,它还提供了同类别的竞争解决方案中拥有最佳内存灵活性的解决方案。换个角度说:妳可能花上一段长长的时间,创造出妳自己的针对特定问题领域的良好解决方案,但是跟为任何程序提供免费解决方案的Core Data 相比却占不到任何性能上的优势。
除了该框架本身提供的好处之外,Core Data还与OS X 工具链狠好地整合在一起。模型设计工具使得妳能够以图形化方式快速而轻易地创建妳的数据模式(schema)。妳可以使用仪表(Instruments)程序中的模板来衡量Core Data 的性能,并且调试各种各样的问题。在OS X 桌面平台,Core Data还能与界面构建器(Interface Builder)整合起来,使得妳可以从妳的模型中创建出用户界面。这方方面面的特性都能够帮助妳缩短妳的程序设计、实现和调试周期。
现在已经知道了Core Data 是什么东西,干什么用的,为什么它是有用的。我们还要做点有用处的事,就是修正某些常见的错误认识和说法。
•.Core Data不是一个关系型数据库,也不是一个关系型数据库管理系统(RDBMS)。
Core Data提供了一个基础设施,可用于跟踪变更,可用于将对象保存到存储设备中去或是从存储设备中读取回来。它可使用SQLite 作为其中一种持久化存储类型。但是,它本身并不属于一个数据库,也不是一个数据库。(举个例子强调这点:妳可以在妳的程序中只使用内存中的存储。妳可以用来跟踪变更以及管理变更,但是却不将任何数据保存到文件中去。)
•.Core Data不是万能药(silver bullet)。
有了Core Data,妳同样需要写代码。尽管有可能仅仅使用Xcode 数据建模工具和界面构建器就创建出复杂的程序,但是,对于实际生活中使用的程序,妳仍然需要编写代码。
•.Core Data不依赖可可绑定。
Core Data可与可可绑定狠好地整合在一起,并且这两者利用了相同的技术—当同时使用时它们能够显著减少妳所需要编写的代码量—但是完全可以只使用Core Data 而不使用(可可)绑定。妳可以创建一个不带用户界面的Core Data 程序(参考Core Data工具教程)。
霍思燕
HxLauncher: Launch Android applications by voice commands