【发布时间】:2009-11-12 20:22:06
【问题描述】:
我正在使用 NSOperationQueue 的两个线程之间传递一些 NSManagedObject 数据,并发级别最高为 1,我想要一些关于我是否正确执行此操作的建议。
由于 NSManagedObject 不是线程安全的,我通过 NSOperation 派生类将 NSManagedObjectID 从 ThreadA(主线程)发送到 ThreadB。一般工作流程:
ThreadA(主线程):
创建 NSPersistentStoreCoordinator
创建主 NSManagedObjectContext(1)
创建 NSManagedObjectContext(2) 以在 workerThread 中使用
创建 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。
【问题讨论】:
标签: iphone objective-c multithreading core-data