我在Core Data和多线程方面遇到了一段时间的麻烦,我不得不说这让我发疯了。在阅读了一些博客和Apple Docs后,我看到推荐的方法是为每个线程和共享NSManagedObjectContext
创建NSPersistentStoreCoordinator
(moc)。但由于我正在使用NSOperations,并且它们没有附加到特定的线程,我必须为每个操作创建一个新的moc。
所以每次创建一个moc时,我都会将商店协调器设置为mock,然后用它来获取一些数据。然后,如果我需要使用我在另一个线程中获取的对象,比如说在前台,我应该再次获取它们,创建一个新的moc,然后使用existingObjectWithID:error:
。
但是,据我所知,没有方法接收一个对象id数组,所以我必须为每个对象使用该调用(existingObjectWithID:error:
),这意味着它可能会循环一段时间,比方说100次。
我的问题是:这是正确的方法吗?我错过了什么吗?它比直接从主线程中检索数据更快吗?
我发现的最多信息是关于修改不同线程中的数据,但我几乎没有发现任何关于获取的信息。
提前致谢:)
答案 0 :(得分:1)
NSManagedObjectContext对象不是线程安全的。这意味着如果您希望从多个线程访问Core Data,则每个线程都需要一个(并且也在线程上创建)。其中每个都可以使用相同的NSPersistentStoreCoordinator,它将序列化对持久存储的访问。