Я хочу использовать Core Data в фоновых потоках и NSOperationQueue. Теперь я подумал, почему бы мне просто не создать класс, содержащий все элементы стека Core Data со свойством NSManagedObjectContext, а затем просто сделать это свойство атомарным?
Одна вещь, которую я не уверен в @synchronize(self) {...}
, заключается в следующем: предположим, что у меня есть свойство, которое считается потокобезопасным:
@property (retain) NSManagedObjectContext *moc;
Каждая NSOperation или поток обращается к классу CoreDataTools
, который имеет это свойство moc. Они получают доступ к этому свойству moc следующим образом:
// Assume: Inside an NSOperation or new thread here...
NSManagedObjectContext *moc = [[CoreDataTools sharedInstance] moc];
// Do a lot of things with moc. Add and remove 20 objects.
Будет ли это вообще эффективно? Я не понимаю, КОГДА эта блокировка эффективна. Только в случае фактического доступа к собственности? Или я могу безопасно работать с экземпляром NSManagedObjectContext до тех пор, пока NSOperation или вызываемый метод фонового потока не будет выполнен и не вернется?
Я знаю, что у NSMangagedObjectContext есть метод -lock. Я хочу знать в целом, будет ли это работать или нет.