在核心数据的后台线程上使用获取请求

时间:2012-03-07 23:35:27

标签: iphone ios multithreading core-data nsoperation

我想使用一个ManagedObjectContext作为主线程,另一个使用NSOperation为后台线程分开,正如Apple建议的那样。并且,每个ManagedObjectContext共享相同的持久存储。

主线程上可能会发生提取,因为我使用Core Data来填充表视图。

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

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

3 个答案:

答案 0 :(得分:1)

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

中的其他信息

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

但是对于写入,如果有可能并发写入,则需要lockunlock持久性存储协调器。