バックグラウンドスレッドとNSOperationQueueでCoreDataを使用したい。ここで、NSManagedObjectContextのプロパティを使用してすべてのCore Dataスタックのものを保持するクラスを作成し、このプロパティをアトミックにする必要がないのはなぜだろうと思いました。
私がよくわからないことの1つ@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.
これはまったく効果的でしょうか?このロックがいつ有効になるのかわかりません。実際に物件にアクセスした場合はどうなりますか?または、NSOperationまたはバックグラウンドスレッドの呼び出されたメソッドが実行されて戻るまで、NSManagedObjectContextインスタンスを安全に操作できますか?
NSMangagedObjectContextに-lockメソッドがあることは知っています。これがうまくいくかどうかを一般的に知りたいです。