Я передаю некоторые данные NSManagedObject между двумя потоками, используя NSOperationQueue с уровнем параллелизма, не превышающим 1, и мне хотелось бы получить несколько советов о том, правильно ли я это делаю.
Поскольку NSManagedObject не является потокобезопасным, я отправляю в NSManagedObjectID из ThreadA (основной поток) в ThreadB через производный класс NSOperation. Общий рабочий процесс:
Нить A (основная нить):
- создает NSPersistentStoreCoordinator
- создает основной NSManagedObjectContext (1)
создает NSManagedObjectContext (2) для использования в workerThread
создает MyNSOperationItem, передает NSManagedObjectContext и добавляет MyNSOperationItem в NSOperationQueue
Тема B (поток 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.