/ / Does @synchronize защитава срещу расови условия в този случай? iphone, multithreading, ios, ipad, nsoperationqueue

Дали @synchronize защитава ли се от расови условия в този случай? iphone, multithreading, ios, ipad, nsoperationqueue

Искам да използвам Core данни във фонови нишки иNSOperationQueue. Сега си помислих защо не трябва просто да създам класа, която да държи всички неща на Stack Core данни със собственост на NSManagedObjectContext, а просто просто да направи това свойство атомно?

Едно нещо, за което не съм сигурен @synchronize(self) {...} е следното: Да приемем, че имам собственост, която се счита за безопасна за конеца:

@property (retain) NSManagedObjectContext *moc;

Всяка NSOperation или конец има достъп до a CoreDataTools клас, който има тази собственост. Те имат достъп до този мощен имот по следния начин:

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

Отговори:

4 за отговор № 1
 @synchronized(self) { /* lock is effective inside here only */ }

2 за отговор № 2

Не. Всяка нишка трябва да има свой собствен контекст на управлявани обекти.

Повече информация: Съвместимост с основните данни