前台和后台线程的不同ManagedObjectContexts

时间:2012-07-20 13:31:53

标签: ios core-data nsmanagedobjectcontext nsoperation

我是iOS开发新手。我正在编写一个iOS应用程序,允许用户读/写核心数据记录。这些记录将通过http同步到服务器。我有一组链接(连续)NSOperations在后台线程中运行,执行同步。

用户可以在同步我们运行的同时进行读/写。我的计划是在app中使用两个managedObjectContexts(都使用相同的persistentStoreCoordinator),一个用于前台,一个用于后台。

我的NSOperations创建的所有后台主题将以串行方式运行,并将使用后台MOC。所有基于UI的东西都将使用前台MOC。

我的问题是:这是一个可接受的iOS核心数据模式吗?我是否可以高兴地在这两个MOC中对同一个模型数据库进行读/写操作而不必担心锁定和并发问题?

非常感谢。

1 个答案:

答案 0 :(得分:3)

这是一种常见的核心数据模式,其中一个框架旨在适应。

如果您自己管理线程,则需要使用一种称为“线程限制”的技术,您可以在标题为“与核心数据的并发”一节中的文档中阅读更多相关信息。

除了线程限制之外,iOS 5.0中还有一些旨在帮助管理并发性的新功能。现在可以使用NSManagedObjectContext配置NSManagedObjectContextConcurrencyType。您可以在NSMainQueueConcurrencyTypeNSPrivateQueueConcurrencyType之间进行选择。

NSMainQueueConcurrencyType的上下文在主线程上运行,可用于为UI提供服务。具有NSPrivateQueueConcurrencyType的上下文用于后台任务。

使用您通过performBlock:performBlockAndWait:方法与之交互的私有上下文,以确保您的代码在正确的线程上执行。要使用主队列上下文,您可以照常与它进行交互,或者如果您的代码没有在主线程上运行,则使用块方法。

文档中未详细讨论这些新功能,“iOS v5.0核心数据发行说明”部分中提供了一些信息。然而,在WWDC 2012会议视频中有一个更有见地的讨论:“会议214 - 核心数据最佳实践”。