从核心数据和多线程获取数据时的效率

时间:2012-02-09 09:37:58

标签: objective-c ios core-data thread-safety

我在Core Data和多线程方面遇到了一段时间的麻烦,我不得不说这让我发疯了。在阅读了一些博客和Apple Docs后,我看到推荐的方法是为每个线程和共享NSManagedObjectContext创建NSPersistentStoreCoordinator(moc)。但由于我正在使用NSOperations,并且它们没有附加到特定的线程,我必须为每个操作创建一个新的moc。

所以每次创建一个moc时,我都会将商店协调器设置为mock,然后用它来获取一些数据。然后,如果我需要使用我在另一个线程中获取的对象,比如说在前台,我应该再次获取它们,创建一个新的moc,然后使用existingObjectWithID:error:

但是,据我所知,没有方法接收一个对象id数组,所以我必须为每个对象使用该调用(existingObjectWithID:error:),这意味着它可能会循环一段时间,比方说100次。

我的问题是:这是正确的方法吗?我错过了什么吗?它比直接从主线程中检索数据更快吗?

我发现的最多信息是关于修改不同线程中的数据,但我几乎没有发现任何关于获取的信息。

提前致谢:)

1 个答案:

答案 0 :(得分:1)

NSManagedObjectContext对象不是线程安全的。这意味着如果您希望从多个线程访问Core Data,则每个线程都需要一个(并且也在线程上创建)。其中每个都可以使用相同的NSPersistentStoreCoordinator,它将序列化对持久存储的访问。