2011-02-11 5 views
1

다중 스레드에서 NSManagedObjectContext를 사용하고 있습니다. NSFetchedResultController performFetch를 호출하기 전에 잠금을 요청하는지 궁금합니다.NSFetchedResultController perform perform thread safe?

내가 할까요이

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

아니면 fetchedResultsController가 여러 스레드에서 공유하는 경우 단지

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

답변

1

다음뿐만 아니라 당신이 페치 수행하기 전에 관리되는 개체 컨텍스트를 고정해야하지만, 그것을 은 그 페치에 의해 반환 된 개체를 사용하는 동안 잠겨 있어야합니다. 당연히 보장하기가 쉽지 않으며 여러 스레드에서 작업을 수행 할 경우 얻을 수있는 이점을 제한하는 경향이 있습니다.

핵심 데이터를 사용하는 응용 프로그램은 스레드 당 하나의 관리되는 개체 컨텍스트를 사용하는 것이 좋습니다. 자세한 내용은 Concurrency with Core Data을 참조하십시오.

+0

fetchedResultsController를 공유하지 않지만 NSManagedObjectedContext를 공유합니다. NSManagedObjectContext를 잠글 필요가 있다는 것을 의미합니까? – Slavik

+0

예. 관리 대상 객체 컨텍스트가 공유 된 경우 컨텍스트와 상호 작용할 때나 IT에서 파생 된 모든 객체가있을 때마다 컨텍스트를 잠글 수 있습니다. 그렇지 않으면 해당 관리 객체에 대한 변경 사항이 올바르게 저장되지 않을 수 있습니다. –

+0

알겠습니다. 고맙습니다. – Slavik

관련 문제