Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用核心数据的最佳做法_Ios_Objective C_Swift_Core Data_Swift2 - Fatal编程技术网

Ios 使用核心数据的最佳做法

Ios 使用核心数据的最佳做法,ios,objective-c,swift,core-data,swift2,Ios,Objective C,Swift,Core Data,Swift2,我应该有不同的托管对象上下文用于读写吗?作为亲子阅读,我是否应该实施MOC?编写MOC的最佳实现是什么?有许多方法可以设置堆栈,每种方法都有其优缺点 在您对核心数据更熟悉之前,最简单的做法如下: 创建一个并发类型为私有队列的父MOC。这将是你的作者,因为它将在后台这样做 创建并发类型为主队列的子MOC。这将是你的主要线索读者 如果需要从主线程进行更改,则必须确保保存这两个上下文以使其持久化。如果可以将所有写操作直接分派到父级进行后台处理,则效果更好。使用FRC和通知处理程序了解何时刷新子级 另外

我应该有不同的托管对象上下文用于读写吗?作为亲子阅读,我是否应该实施MOC?编写MOC的最佳实现是什么?

有许多方法可以设置堆栈,每种方法都有其优缺点

在您对核心数据更熟悉之前,最简单的做法如下:

创建一个并发类型为私有队列的父MOC。这将是你的作者,因为它将在后台这样做

创建并发类型为主队列的子MOC。这将是你的主要线索读者

如果需要从主线程进行更改,则必须确保保存这两个上下文以使其持久化。如果可以将所有写操作直接分派到父级进行后台处理,则效果更好。使用FRC和通知处理程序了解何时刷新子级


另外,我从未在我的应用程序中使用过这种方法,但我有一个开发良好的核心数据堆栈,可以从一个项目带到另一个项目。

正如已经指出的那样,有许多因素决定了你如何以及为什么这样做。在我看来,其中最重要的是您是否需要支持多线程。这里有一个很好的链接,可以(通过视觉)解释父/子模式


我使用SSDataKit帮助进行核心数据设置,然后在需要的地方进行扩展。在我高度并行的应用程序中,我为每个NSO操作创建一个新的MOC,其关系为:私有队列->主队列->临时子队列(这些操作在后台线程上运行)。在更简单的应用程序中,我使用基本的SSDataKit(父/子)设置,就是这样。

父-子实现可能会导致性能低下和过于复杂。你的问题的答案取决于你的情况。你能详细说明一下吗?我希望对此有所启发。基于您的问题和本文中的其他评论,我建议您使用单个主队列上下文,因为这是最简单的方法。当您阅读了文档并理解了与CoreData相关的多线程的一些复杂性之后,请回来询问更具体的问题。在那之前,这就像试图向一个不懂均值、方差、自变量或正态分布的人解释中心极限定理。除了苹果的文档之外,你能推荐一些链接、博客和文章吗?苹果的文档实际上对大多数核心数据都很好,我建议从这里开始。如果您在Xcode中打开文档,您可以看到核心数据部分。该部分包括所有参考文档,以及所有关于核心数据的WWDC视频、所有专业编程指南和许多完整示例应用程序的源代码。我还想推荐汤姆·哈林顿的《核心数据》一书。最复杂但仍然是最佳实践的事情是什么?你能分享你完善的核心数据栈吗?至少讨论一下如何提出这种堆栈的概述。