2011-02-11 52 views
1

我正在使用NSManagedObjectContext在多线程中。 我不知道它是否在请求NSFetchedResultController performFetch之前请求锁定。是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   
} 

回答

1

如果您fetchedResultsController跨多个线程共享,那么不仅要在执行抓取前锁定管理对象范围内,但它也必须锁定,而您使用该提取返回的任何对象。自然,这不是一件容易保证的事情,并且首先会限制多线程处理的好处。

强烈建议使用核心数据的应用程序为每个线程使用一个托管对象上下文。有关更多信息,请参阅Concurrency with Core Data

+0

我不共享fetchedResultsController,但我共享NSManagedObjectedContext。 我的意思是我必须锁定NSManagedObjectContext? – Slavik 2011-02-11 09:31:42