多线程使用核心数据(NSOperationQueue和NSManagedObjectContext)

Dou*_*yle 14 iphone multithreading core-data objective-c

在Apple的核心数据并发核心数据文档中,他们列出了线程安全的首选方法,即每个线程使用单独的NSManagedObjectContext和共享的NSPersistentStoreCoordinator.

如果我有一些NSOperations在NSOperationQueue上一个接一个地运行,那么每个任务创建上下文会有很大的开销吗?

由于NSOperationQueue的最大并发操作数为1,因此我的许多操作将使用相同的线程.我可以使用线程字典为每个线程创建一个NSManagedObjectContext吗?如果我这样做,我以后会有问题清理我的背景吗?

在这种情况下使用Core Data的正确方法是什么?

Bar*_*ark 19

在这种情况下,使用Core Data的正确方法是创建单独的NSManagedObjectContext每个操作具有您锁定的单个上下文(通过-[NSManagedObjectContext lock]在使用之前和-[NSManagedObjectContext unlock]使用之后).如果操作是串行的并且没有其他线程使用上下文,则锁定的方法可能有意义.

使用哪种方法是一个经验问题,没有数据就无法解决.变量太多,不具备一般规则.性能测试中的硬数字是做出明智决策的唯一方法.