我一直在使用Core Data和多线程有一段时间的麻烦,我不得不说它让我疯狂。在阅读了一些博客和Apple Docs后,我看到推荐的方法是为每个线程创建一个NSManagedObjectContext
(moc),并共享NSPersistentStoreCoordinator
。但是,因为我使用NSOperations,并且它们没有附加到特定的线程,所以我必须为每个操作创建一个新的moc。从核心数据和多线程中获取数据时的效率
因此,每次创建moc时,我都将商店协调员设置为模拟,并使用它获取一些数据。然后,如果我需要使用我在另一个线程中获取的对象,例如在前景中,我应该再次获取它们,创建一个新的moc,并使用existingObjectWithID:error:
。
但据我所知,没有方法接收对象ID数组,因此我必须为每个对象使用该调用(existingObjectWithID:error:
),这意味着它可能会循环一段时间,比方说100时间例如。
我的问题是:这是正确的方法吗?我错过了什么吗?它是否比直接从主线程获取数据更快?
我发现的最多信息是关于修改不同线程中的数据,但我几乎找不到关于抓取的信息。
在此先感谢:)
您定位的是哪个版本的iOS? – 2012-02-09 10:54:07
iOS 4和iOS 5(不同的项目) – vicpenap 2012-02-09 11:08:32
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/Concurrency.html – 2017-04-21 22:37:03