虽然 Core Data 是 Apple 的后代企业对象框架 http://en.wikipedia.org/wiki/Enterprise_Objects_Framework,一个对象关系映射器(ORM),它与关系后端紧密相连,Core Data 是not一个 ORM。事实上,它是一个对象图管理框架。它管理着一个可能非常大的对象实例图,允许应用程序通过根据需要将对象移入和移出内存来处理无法完全装入内存的图。核心数据还管理对属性和关系的约束并维护引用完整性(例如,在关系中添加/删除对象时保持前向和后向链接一致)。因此,Core Data 是构建 MVC 架构“模型”组件的理想框架。
为了实现其图形管理,Core Datahappens使用 SQLite 作为磁盘存储。它could已经使用不同的关系数据库甚至非关系数据库来实现,例如CouchDB http://couchdb.apache.org/。正如其他人指出的那样,Core Data 还可以使用 XML 或二进制格式或用户编写的原子格式作为后端(尽管这些选项要求整个对象图适合内存)。如果您对如何在 SQLite 后端实现 Core Data 感兴趣,您可能需要查看 OmniGroup 的全方位数据对象 http://www.omnigroup.com/developer/框架,核心数据 API 子集的开源实现。这BaseTen http://basetenframework.org/框架也是使用 PostgreSQL 作为后端的 Core Data API 的实现。
由于 Core Data 无意成为 SQLite 的 ORM,因此它无法读取任意 SQLite 模式。相反,您不应该依赖于能够使用其他 SQLite 工具读取 Core Data 的 SQLite 数据存储;架构是可能更改的实现细节。
因此,直接使用 Core Data 或 SQLite 之间并不存在任何冲突。如果您想要一个关系数据库,请使用 SQLite(直接或通过 Objective-C 包装器之一,例如FMDB https://github.com/ccgus/fmdb),或关系数据库服务器。但是,您可能仍然想学习 Core Data 作为对象图管理框架。结合Apple的控制器类和键值绑定兼容的视图小部件,您可以实现完整的MVC架构very代码很少。