Iphone NSO操作和CoreData线程

Iphone NSO操作和CoreData线程,iphone,objective-c,multithreading,core-data,Iphone,Objective C,Multithreading,Core Data,我正在使用并发级别最高为1的NSOperationQueue在两个线程之间传递一些NSManagedObject数据,我想了解一些关于我是否正确执行此操作的建议 由于NSManagedObject不是线程安全的,所以我通过NSOperation派生类将NSManagedObject从ThreadA(主线程)发送到ThreadB。一般工作流程: 螺纹A(主螺纹): 创建NSPersistentStoreCoordinator 创建主NSManagedObjectContext(1) 创建用于

我正在使用并发级别最高为1的NSOperationQueue在两个线程之间传递一些NSManagedObject数据,我想了解一些关于我是否正确执行此操作的建议

由于NSManagedObject不是线程安全的,所以我通过NSOperation派生类将NSManagedObject从ThreadA(主线程)发送到ThreadB。一般工作流程:

螺纹A(主螺纹):

  • 创建NSPersistentStoreCoordinator

  • 创建主NSManagedObjectContext(1)

  • 创建用于workerThread的NSManagedObjectContext(2)

  • 创建MyNSOperationItem,传递NSManagedObjectContext并将MyNSOperationItem添加到NSOperationQueue

ThreadB(NSOperationQueue的线程):

  • NSOperation派生类将从持久化数据库中检索数据
    使用提供的objectID存储
我的NSOperation类如下所示:

@interface MyNSOperationItem: NSOperation
{
    // MyNSOperationItem is created in thread1 and MOC will be 
    // set on creation
    NSManagedObjectContext   *threadedMOC;
   
    NSManagedObjectID        *workItemObjectID;
}
@end

因此,我的NSOperation派生类可以引用NSManagedObjectContext,还是应该将第二个NSManagedObjectContext存储在其他位置?由于这是一个队列,将创建许多MyNSOperationItem实例,每个实例都指向同一个NSManagedObjectContext。

我认为这将为您提供所需的一切:

如果需要将提取工作卸载到后台线程,下面是我在上面引用的文档中的一点提示:

获取后台线程

最简单的多线程之一 可用于核心数据的技术 提高应用程序响应能力 是在一个服务器上执行提取请求 背景线程。(请注意 技术只有在你需要的时候才有用 使用SQLite存储,因为数据来自 二进制和XML存储被读入 内存立即打开。)此 这意味着如果提取很复杂 或者返回大量数据,您可以 可以将控件返回给用户并 在结果到达时显示结果。为了 有关如何执行此操作的示例,请参见 中的背景获取示例 /开发者/Examples/CoreData/

您使用两个托管对象上下文 与一个持久的 商店协调员。你进一个 后台托管对象上下文 线程,并传递 已将对象提取到另一个线程。在里面 第二个线程(通常是 应用程序的主线程,以便 然后可以显示结果),您可以使用 对象中的第二个错误上下文 使用这些对象ID(您使用 objectWithID:实例化 对象)


该链接引用了“/Developer/Examples/CoreData”中名为“BackgroundFetching”的示例应用程序——我的计算机上不存在这样的目录。你知道在哪里可以找到那个样本吗?是的。你说得对。而且它似乎也不再出现在开发人员的网站上。不知道交易是什么。你可以向苹果公司提交一个文件错误,指出过时的信息。也许他们会用新的路径或链接来更新它。然后,也许他们会更新它并删除路径/链接。很抱歉。