我正在使用NSOperationQueue将一些NSManagedObject数据在两个线程之间传递,同时并发级别最大为1,并希望您能就我是否正确地执行此操作提出建议。
由于NSManagedObject不是线程安全的,因此我通过一个继承自NSOperation的类从ThreadA(主线程)向ThreadB发送NSManagedObjectID。一般的工作流程如下:
ThreadA(主线程): - 创建NSPersistentStoreCoordinator - 创建主NSManagedObjectContext(1) - 为workerThread创建NSManagedObjectContext(2) - 创建MyNSOperationItem,将NSManagedObjectContext传递给它,并将MyNSOperationItem添加到NSOperationQueue中
ThreadB(NSOperationQueue的线程): - NSOperation派生类将使用提供的objectID从持久存储中检索数据。
我的NSOperation类如下所示:
由于NSManagedObject不是线程安全的,因此我通过一个继承自NSOperation的类从ThreadA(主线程)向ThreadB发送NSManagedObjectID。一般的工作流程如下:
ThreadA(主线程): - 创建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。