NSPersistentStoreCoordinator线程安全吗?

Ale*_*lex 10 iphone cocoa cocoa-touch core-data

我正在开发一款使用Core Data的iPhone应用程序.该应用程序调用Web服务,解析生成的XML文件,然后在我的应用程序中创建或修改Core Data对象.我已经处理了Web服务调用和异步解析,但我一直在将解析后的数据交给主线程来操作Core Data对象.我也想在后台线程中运行这个过程.(暂停1-2秒不能带来出色的用户体验)

显而易见的方法是专门为后台线程创建一个托管对象上下文,但后来我在Apple的核心数据编程指南中读到了这一行:

持久性存储协调器向其受管对象上下文提供一个虚拟存储的外观.对于完全并发的操作,您需要为每个线程使用不同的协调器.

所以这里有一个问题:您不能让两个人NSPersistentStoreCoordinator提供对同一商店的访问权限.但是,Marcus Zarra的核心数据书断言这NSPersistentStoreCoordinator 线程安全的,并将序列化I/O请求(第157页).

有人可以为我清除这个吗?是否可以在NSPersistentStoreCoordinator与主线程共享相同线程的单独线程上运行第二个托管对象上下文?或者,更简洁,是NSPersistentStoreCoordinator线程安全的?

ger*_*ry3 17

Zarra后来指出上下文锁定了商店,因此可以跨线程使用相同的NSPersistentStoreCoordinator.

尽管NSPersistentStoreCoordinator也不是线程安全的,但NSManagedObjectContext知道如何在使用时正确锁定它.因此,我们可以根据需要将多个NSManagedObjectContext对象附加到单个NSPersistentStoreCoordinator,而不必担心发生冲突.