何时在 iPhone 开发中使用 CoreData
Posted
技术标签:
【中文标题】何时在 iPhone 开发中使用 CoreData【英文标题】:When to use CoreData in iPhone development 【发布时间】:2010-10-04 18:20:21 【问题描述】:我一直在考虑为 ios 创建一个新的应用程序,在我最近的几个应用程序之后,我一直很想使用 CoreData(以获得包括保存和自动撤消/重做在内的好处)。
我在尝试实现我在项目中获得的数据模型时有点困惑,因为 CoreData 似乎比数据模型更接近数据库。
我是否应该将 CoreData 用于通常不符合我通常使用 SQL 样式数据库的“大量数据/记录”描述的应用程序?
如果有帮助,我正在设计的应用程序将是一种文档编辑器,因此我需要表示许多对象(文档中可能包含嵌入的图像、图形/图表、超链接等) 我需要从 xml 描述中创建这个模型。
这些“项目”中的大多数都需要实现一组接口(该模型是为 Java 产品创建的;我很难看到继承和抽象接口如何应用于 CoreData),以及我发现的每个示例到目前为止,似乎将基本元素(如 NSDate 或 String)添加到一个简单的模型中。
这听起来像是 CoreData 的候选者,还是 CoreData 更像是在应用程序中实现数据库的工具? (即图书馆系统/员工数据库)。
【问题讨论】:
【参考方案1】:一旦您能够正确编写它将替换的大部分代码,请考虑将 CoreData 作为一个选项。所以一旦你知道如何正确序列化/反序列化、编写撤消/重做、KVO、复制等。
我是否应该使用 CoreData 通常不适合的应用程序 '大量数据/记录' 描述我通常会使用 SQL风格的数据库?
CoreData 不限于大型数据库(根本) - 它适用于小型数据库,以及超出数据库(二进制文件和文档,直接在内存中使用模型)。
您的示例可以从 CoreData 中受益。这取决于您需要的自定义代码量 - 如果您只是将 CD 对象用作界面生成器,并且您的应用程序使用大量自定义代码/对象,有时编写代码会更容易。老实说,我从未在交付应用程序中使用过 CoreData - 在此之前我总是找到将模型迁移到现有代码的理由(假设在开发/建模阶段也使用了 CoreData)。
这是一个不错的框架,但不应将其视为可以解决大多数问题的“神奇对象生成器”。首先,您需要了解您打算用它替换的技术/模式。它的理想用途有限。如果您无法编写对象所依赖的代码,请不要使用 CoreData。 iow - 不要将其视为初始努力的替代品,因为有时它是一个好的选择和一个坏的选择 - 但如果你不(真正)理解你的上下文,你就无法为你的上下文做出客观的答案它的能力。
【讨论】:
【参考方案2】:Core Data 的一个目的是管理内存中的对象图。这当然适合您的应用程序。然后可以轻松地将其持久化到磁盘。使用mogenerator 之类的工具,您可以使用 Core Data 来管理对象生命周期、图形和持久性,但在顶部添加您的自定义协议。
简而言之,是的,您可以将 Core Data 用于非数据库用途,但需要做一些工作以符合模型。
【讨论】:
唐是正确的。如果您将 Core Data 视为“在应用程序中实现数据库的工具”,您将会遇到麻烦。它是一个对象持久性框架,碰巧(通常)使用数据库作为其数据存储。将其视为数据库将导致您可能会后悔的设计和编码决策。 @Robot K - 这是一个更好的解释!以上是关于何时在 iPhone 开发中使用 CoreData的主要内容,如果未能解决你的问题,请参考以下文章
何时Xcode中CoreData托管对象Optional和Default Value选项会变得尤为敏感?
何时Xcode中CoreData托管对象Optional和Default Value选项会变得尤为敏感?