Ios 在后台线程上读取CoreData托管对象

Ios 在后台线程上读取CoreData托管对象,ios,multithreading,core-data,Ios,Multithreading,Core Data,我知道CoreData不是线程安全的,每个线程需要一个MOC,我使用两个线程(一个用于处理传入的更新,一个用于提供UI),但是。。。可以在完全不同的线程上读取对象,如: NSManagedObject *mo = fetch some object dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ loop over the objects in a relation

我知道CoreData不是线程安全的,每个线程需要一个MOC,我使用两个线程(一个用于处理传入的更新,一个用于提供UI),但是。。。可以在完全不同的线程上读取对象,如:

NSManagedObject *mo = fetch some object
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
      loop over the objects in a relation, fetch some data and cache it....
});
其中
DISPATCH\u QUEUE\u PRIORITY\u BACKGROUND
可以是默认值、低值、高值中的任意一个。我有一些奇怪的行为,也许我不应该对我的托管对象做任何背景工作,即使是只读的


如果我不应该这样做,有什么建议吗?仅为此
dispatch\u async
块创建另一个临时MOC?

您应该在线程内创建managedObjectContext,然后从中获取内容。顺便说一句,您可以使用NSPrivateQueueConcurrencyType在后台提取,为什么要使用自己的队列。可能重复的我没有意识到我可以将私有队列用于任何后台线程;我要做的是在我分派块之前,在使用它的MOC上重新获取我的对象。谢谢