使用全局托管对象上下文来支持并发

时间:2017-09-28 17:14:01

标签: ios objective-c core-data

在阅读开发人员文档时,我还没有找到答案。

Core Data中使用主要和私有队列上下文时,使用全局NSPrivateQueueConcurrencyTypeNSMainQueueConcurrencyType上下文是一个很好的策略,我可以在我的应用中访问这些上下文并在整个生命周期内使用我的应用程序?

或者,每次我需要使用NSManagedObjectContext时,我应该创建一个新实例吗?

我使用了this documentation,但它没有回答这个问题。

2 个答案:

答案 0 :(得分:1)

在大多数情况下,目前的最佳做法是从NSPersistentContainer开始。它的方法指出了处理托管对象上下文的良好实践。

NSPersistentContainer具有使用主队列并发的属性viewContext。顾名思义,它可以直接与UI一起使用,也可以在主队列中使用。对这些情况使用此上下文。不要创建新的主队列上下文。

还有几种方法可以通过newBackgroundContext()performBackgroundTask对私人队列进行后台处理。在大多数情况下,您可以在需要执行后台工作时使用其中任何一项,而不必费心保留对长期背景上下文的引用。需要注意的是,由于它们使用单​​独的后台队列,因此一个后台上下文可能与另一个后台上下文同时执行。如果在您的情况下似乎可能,您可能希望保留背景上下文以避免这种可能性。否则,您的背景上下文可能需要合并在其他背景上下文中进行的更改,这可能会变得非常难看。

以上所有都有例外,但这是一个很好的起点。如果由于某种原因这不适合您的应用,请回过头来回答详细说明原因的问题。

答案 1 :(得分:0)

我建议你在不同的上下文中写,然后将其合并。

作为一种良好做法,我可以推荐使用设置MagicalRecord

具体来说,他们使用Default Context as a Child of a RootSavingContext。然后所有写入都进入new context,然后合并到根上下文中。

这样,默认上下文可以在主线程中使用并获得适当的更新通知,例如用于FetchedResultsController。