1

在处理核心数据时,我一直想知道拥有非托管对象的模型类是否有任何价值?如果改为为这些对象提供持久性,则处理核心数据存储的数据管理器类知道如何将类(或多个类)的实例写入核心数据存储,并且当您的应用程序想要从持久性中调用这些实例时,数据存储有一种方法可以在没有托管对象上下文的情况下创建这些对象的实例吗?

我学会使用核心数据的方法是使用 xCode 提供给您的托管对象模型创建模型类,然后每当您创建或销毁这些类的实例时,您将它们视为托管对象,而不是普通类型的对象实例大多数其他类创建。这总是让我觉得有些复杂和困难,因为每当您需要更改托管对象时,您都需要通过托管对象上下文来完成,这在一天结束时只是一个数据库。

抱歉,如果问题令人困惑,如果您需要澄清,我非常乐意,我发现讨论 Core Data 有点困难。

4

1 回答 1

3

我有一个非常依赖核心数据的应用程序。

不,我认为拥有模型对象的非托管版本没有任何价值。它只会增加复杂性(你需要编写一堆额外的代码),并且会带走使用 Core Data 的一些好处(主要是对象的延迟加载)。

您确实通过托管对象上下文创建和销毁托管对象,但除此之外,托管对象的行为与非托管对象相同。例如,您可以更改托管对象的属性,而无需对托管对象上下文进行任何操作。

Core Data 并不是真正的数据库。它更像是一个ORM(尽管 Apple 并没有这样称呼它)。这是一种将对象持久存储到持久存储并从持久存储中检索它们的方法,它所做的远不止将内容存储在数据库中。

如果你真的想拥有非托管数据模型,我的建议是根本不要使用 Core Data。像 Gus Mueller 的FMDB或 Marco Arment 的FCModel

当然,Core Data 的某些方面很难理解。但是一旦你弄清楚了,它并没有那么糟糕,它使某些事情仅仅使用数据库容易得多。

您可以阅读Core Data Programming Guide,但我个人在第一次学习它时并没有太多运气。不过,一本好的 Core Data 书可能也不错;当我第一次学习它时,我阅读了 iOS 的 Core Data,发现它很有帮助。

于 2015-08-20T02:06:15.357 回答