2011-04-28 66 views
0

是否确定使用核心数据NSManagedObjects在GCD块内的方式,他们不会互相影响,如果我知道,没有别的事情(即我的计划是在此时间点仅执行上的数据这个GCD处理)?核心数据和大中央调度?

据称NSManagedObject也不行与线程使用。但是对我来说很模糊。它可能是不安全的,因为发生了错误(因此数据实际上不可变) - 但是,错误不应该影响内存中的其他NSManagedObject数据。除非,在我使用它们时,数据的错误实际上是错误的out其他NSManagedObjects。会发生吗?

更具体的,我说的是像我的核心数据对象图的节点获得一组所有NSManagedObjects(NSNumbers),并加入1至他们每个人。

回答

2

你只需要确保(1)每个线程/操作都有自己独特的管理对象上下文,并且与所有其他同时活动上下文(2)你最终合并修改。

这是很常见的有一个后台线程下载数据,并把它变成核心数据,同时前台线程管理UI。每个线程都有自己的上下文,它们独立运行直到下载完成,此时后台上下文通知前线程上下文它必须合并更新的对象。

+0

请解释一下,在GCD而言,在这里我就不明确管理线程。我怎么知道有多少MOC以及如何与他们合作? – Nektarios 2011-04-28 19:25:04

+0

您为每个创建的操作初始化上下文。您可以将每个操作视为自己的小程序。所以,每个小程序都需要自己的上下文。请参阅Core Data编程指南的并发部分。这些原则适用于线程所使用的操作。最重要的概念是,每个单独的上下文在合并更新之前都不知道其他上下文所做更改。 – TechZen 2011-04-29 15:21:52

+0

这是否意味着每个dispatch_async调用都应该/必须设置它自己的managedObjectContext? – terphi 2013-07-17 17:37:50