首页 文章

核心数据与SQLite 3 [已关闭]

提问于
浏览
308

我已经非常熟悉关系数据库,并且过去曾使用SQLite(和其他数据库) . 但是,Core Data具有一定的吸引力,所以我正在考虑花一些时间来学习它以用于我的下一个应用程序 .

使用Core Data而不是SQLite有什么好处,反之亦然?每个人的利弊是什么?

当Apple没有将它用于许多旗舰应用程序(如Mail.app或iPhoto.app)时,我发现很难证明学习Core Data的成本是合理的 - 而是选择了SQLite数据库 . SQLite也广泛用于iPhone .

那些熟悉使用它们的人可以评论他们的经历吗?也许,就像大多数事情一样,问题比仅仅使用一个而不是另一个问题更深层次?

4 回答

  • 45

    核心数据不是一个数据库引擎,而是一个在实际数据存储上抽象的API . 您可以将Core Data保存为sqlite数据库,plist,二进制文件甚至自定义数据存储类型 .

    我建议学习核心数据,因为它是一个很好的资源,大大加速了可可应用程序开发的许多部分 .

  • 278

    使用iOS 5.0,您可以获得额外的好处,即如果您使用的是Core Data,则可以免费使用iCloud文件同步 . 如果您直接使用SQLite,则必须进行大量的手动修改和实现才能使其在iCloud中同步 .

  • 34

    尽管Core Data是Apple的Enterprise Object Framework的后代,但是对象关系映射器(ORM)与关系后端紧密相关,Core Data不是ORM . 事实上,它是一个对象图管理框架 . 它管理一个可能非常大的对象实例图,允许应用程序使用一个图形,该图形根据需要通过故障对象进出内存而不能完全适合内存 . 核心数据还管理对属性和关系的约束并维护参考完整性(例如,当向/从关系添加/移除对象时保持前向和后向链接一致) . 因此,核心数据是构建MVC架构的"model"组件的理想框架 .

    为了实现其图形管理,Core Data恰好使用SQLite作为磁盘存储 . 它可以使用不同的关系数据库甚至是非关系型数据库(如CouchDB)来实现 . 正如其他人所指出的,Core Data也可以使用XML或二进制格式或用户编写的原子格式作为后端(尽管这些选项要求整个对象图适合内存) . 如果你是're interested in how Core Data is implemented on an SQLite backend, you might want to check out OmniGroup' s OmniDataObjects框架,那是Core Data API子集的开源实现 . BaseTen框架也是使用PostgreSQL作为后端的Core Data API的实现 .

    由于Core Data并非旨在成为SQLite的ORM,因此无法读取任意SQLite架构 . 相反,您不应该依赖于能够使用其他SQLite工具读取Core Data的SQLite数据存储;架构是可能会更改的实现细节 .

    因此,直接使用Core Data或SQLite之间并没有任何冲突 . 如果需要关系数据库,请使用SQLite(直接或通过其中一个Objective-C包装器,如FMDB)或关系数据库服务器 . 但是,您可能仍希望学习Core Data以用作对象图管理框架 . 结合Apple的控制器类和键值绑定兼容的视图小部件,您可以使用非常少的代码实现完整的MVC架构 .

  • 12

    SQLite是Core Data的数据库格式之一 . 使用Core Data可以更好地与Cocoa API的其余部分集成 .

相关问题