Chcem použiť základné údaje v pozadí aNSOperationQueue. Teraz som si myslel, prečo by som nemal len vytvoriť triedu, ktorá by mala všetky veci Core Data stack s vlastnosťou NSManagedObjectContext, a potom len urobiť túto vlastnosť atómovú?
Jedna vec, o ktorej si nie som istý @synchronize(self) {...}
je toto: Predpokladajme, že mám vlastnosť, ktorá je považovaná za bezpečnú pre nite:
@property (retain) NSManagedObjectContext *moc;
Každá NSOperácia alebo vlákno pristupuje k a CoreDataTools
trieda, ktorá má túto mocnosť. Prístup k tejto moc moc ako toto:
// 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.
Bolo by to efektívne vôbec? Neviem, kedy je táto zámka efektívna, len v prípade skutočného prístupu k nehnuteľnosti alebo môžem bezpečne pracovať s inštanciou NSManagedObjectContext, až kým sa NSOperation alebo volaná metóda pozadia vlákna nevykoná a nevráti sa?
Viem, že NSMangagedObjectContext má metódu blokovania. Chcem všeobecne vedieť, či to funguje alebo nie.
odpovede:
4 pre odpoveď č. 1 @synchronized(self) { /* lock is effective inside here only */ }
2 pre odpoveď č. 2
Nie. Každé vlákno by malo mať vlastný kontext spravovaných objektov.
Ďalšie informácie: súbežnosť s hlavnými údajmi