У меня есть класс CoreDataUtilities с методом класса, который сохраняет контекст управляемого объекта и устраняет любые ошибки:
+ (void)saveContext:(NSManagedObjectContext*)moc {
NSError *error = nil;
if (moc != nil) {
if ([moc hasChanges] && ![moc save:&error]) {
NSLog(@"MOC save error: %@, %@", error, [error userInfo]);
}
}
}
Я вызываю этот метод из подклассов NSOperation и фоновых потоков и передаю экземпляр NSManagedObjectContext потока / NSOperation.
Мое беспокойство заключается в следующем:
Если поток A вызывает этот метод, и пока этот метод выполняется на полпути, поток B также вызывает его. С другим MOC конечно. Woul это мешать в любом случае? С моей точки зрения, это не так, потому что этот метод взаимодействует только с экземпляром MOC, который в любом случае является "частным" или "принадлежит" вызывающему потоку. Но меня раздражает то, что даже локальные переменные в методе «перепутаны», когда несколько потоков выполняют один и тот же кусок кода одновременно. Или каждая переменная имеет свой собственный «контекст» в новом потоке с собственной кучей (или, если на то пошло, стек) памяти?
Имеет ли большое значение, если я помещу этот код сохранения непосредственно в подклассы NSOperation и фоновые потоки? Почему?