Я хочу использовать Core Data в фоновых потоках и NSOperationQueue. Теперь я подумал, почему я не должен просто создать класс, содержащий все вещи из стека базовых данных, со свойством 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. В общем, я хочу знать, сработает ли это или нет.