2011-02-11 41 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