Iphone NSFetchedResultController performFetch线程安全吗?

Iphone NSFetchedResultController performFetch线程安全吗?,iphone,core-data,Iphone,Core Data,我正在多线程中使用NSManagedObjectContext。 我想知道它是否在调用NSFetchedResultController performFetch之前请求锁 我可以这样做吗 [moc lock]; NSError *error = nil; if (![fetchedResultsController_ performFetch:&error]) { //TODO: add fetch error handler } [moc unlock];

我正在多线程中使用NSManagedObjectContext。 我想知道它是否在调用NSFetchedResultController performFetch之前请求锁

我可以这样做吗

[moc lock];
NSError *error = nil;
if (![fetchedResultsController_ performFetch:&error]) {
    //TODO: add fetch error handler        
} 
[moc unlock];
或者只是

NSError *error = nil;
if (![fetchedResultsController_ performFetch:&error]) {
    //TODO: add fetch error handler        
}

如果您的
fetchedResultsController
跨多个线程共享,那么您不仅必须在执行提取之前锁定托管对象上下文,而且在使用该提取返回的任何对象时,还必须将其锁定。当然,这不是一件很容易保证的事情,而且往往会首先限制在多线程上执行操作的好处


强烈建议使用核心数据的应用程序在每个线程中使用一个托管对象上下文。有关详细信息,请参阅。

如果跨多个线程共享您的
fetchedResultsController
,则您不仅必须在执行提取之前锁定托管对象上下文,而且在使用该提取返回的任何对象时也必须锁定它。当然,这不是一件很容易保证的事情,而且往往会首先限制在多线程上执行操作的好处


强烈建议使用核心数据的应用程序在每个线程中使用一个托管对象上下文。有关详细信息,请参阅。

我不共享fetchedResultsController,但我共享NSManagedObjectedContext。我是说我必须锁定NSManagedObjectContext?是的。如果托管对象上下文是共享的,那么无论何时与上下文或从中提取的任何对象交互,都必须锁定上下文。如果没有,则对这些托管对象的更改可能无法正确保存。我不共享fetchedResultsController,但共享NSManagedObjectedContext。我是说我必须锁定NSManagedObjectContext?是的。如果托管对象上下文是共享的,那么无论何时与上下文或从中提取的任何对象交互,都必须锁定上下文。如果不这样做,则对这些托管对象的更改可能无法正确保存。