2012-03-07 29 views
2

我想为主线程使用一个ManagedObjectContext,使用NSOperation为后台线程分开一个,就像Apple建议的那样。而且,每个ManagedObjectContext共享相同的持久性存储。在核心数据的后台线程上使用提取请求

可能会在主线程上发生取数,因为我使用核心数据填充表视图。

在后台中,我需要访问存储图像名称的NSManagedObject属性。然后,后台线程将创建并缓存这些图像,这是创建后台线程的主要原因。

鉴于此,如果两个线程都尝试访问持久性存储,是否存在任何危险(如锁定),因为两者都可能同时从中获取数据?

回答

0

两个不同的MOC可以同时访问相同的PSC进行读取。

但是,对于写入,如果存在并发写入的机会,则需要lockunlock持久性存储协调器。

+1

好吗?我在苹果文档中没有读到任何有关这方面的信息。你能指出我的来源吗? – 2012-03-08 00:06:42

+0

我从来没有在文档中找到它。这是辛苦赚来的经验和一些长时间的调试会议。如果您将两个不同的线程不断写入此答案中的相同NSPSC – amattn 2012-03-08 00:13:58

+0

示例代码,则很容易重新生成代码:http://stackoverflow.com/questions/5236860/app-freeze-on-coredata-save/5237031#5237031 – amattn 2012-03-10 15:14:36

0

只要每个线程使用自己的NSManagedObjectContext,让它们共享NSPersistentStoreCoordinator是完全安全的。 NSManagedObjectContext将根据需要处理持久存储的所有适当锁定。但是,您必须小心,不要在线程之间共享NSManagedObject

1

每个线程都需要自己的托管对象上下文,但所有线程都需要共享一个持久存储协调器 - 这将处理您描述的潜在问题。请参阅Core Data Concurrency Programming Guide中的其他信息。

相关问题