2

バックグラウンドスレッドと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メソッドがあることは知っています。これがうまくいくかどうかを一般的に知りたいです。

4

2 に答える 2

4
 @synchronized(self) { /* lock is effective inside here only */ } 
于 2011-06-01T14:41:43.703 に答える
2

いいえ。各スレッドには、独自の管理対象オブジェクトコンテキストが必要です。

詳細:CoreDataとの同時実行

于 2011-06-01T13:54:30.090 に答える