2

我想在后台线程和 NSOperationQueue 中使用 Core Data。现在我想我为什么不应该创建一个类来保存所有具有 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 方法。我想知道这是否可行。

4

2 回答 2

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

不,每个线程都应该有自己的托管对象上下文。

更多信息:核心数据并发

于 2011-06-01T13:54:30.090 回答