Искам да използвам 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. Искам да знам като цяло дали това ще работи или не.