2011-04-28 2 views
0

코어 데이터 NSManagedObjects를 GCD 블록 내에서 상호 작용하지 않는 방식으로 사용할 수 있습니까? 다른 프로그램이 없다는 것을 알고있는 경우 (예 : 프로그램에서이 시점에이 GCD 처리 만이 데이터를 실행하는 경우))?핵심 데이터 및 그랜드 센트럴 디스패치?

아마도 NSManagedObject는 스레드와 함께 사용하지 않아도됩니다. 그러나 그것은 나에게 모호합니다. 오류가 발생하여 안전하지 않을 수 있습니다 (데이터가 실제로 변경 불가능하지 않음). 그러나 오류가 메모리의 다른 NSManagedObject 데이터에 영향을주지 않아야합니다. 그렇지 않으면 데이터 오류가 실제로 오류 다른 NSManagedObjects 내가 그들을 사용하는 동안 결함이 아니라면. 그 일이 일어날까요?

좀 더 구체적으로 말하면, 핵심 데이터 개체 그래프의 노드에서 모든 NSManagedObjects (NSNumbers) 세트를 얻고 각각에 1을 더하는 것과 같은 것을 말합니다.

답변

2

(1) 각 스레드/작업에 고유 한 관리 객체 컨텍스트가 있고 (2) 결국 변경 사항을 다른 모든 동시 활성 컨텍스트와 병합해야합니다.

전경 스레드가 UI를 관리하는 동안 배경 스레드가 데이터를 다운로드하고 코어 데이터에 배치하는 것이 일반적입니다. 각 스레드는 고유 컨텍스트를 가지며 다운로드가 완료 될 때까지 독립적으로 작동하며 백그라운드 컨텍스트는 업데이트 된 개체를 병합해야한다는 프론트 스레드 컨텍스트를 통보합니다.

+0

스레드를 명시 적으로 관리하지 않는 GCD 용어로 설명하십시오. 얼마나 많은 MOC가 있고 어떻게 사용하는지 알 수 있습니까? – Nektarios

+0

작성한 각 작업에 대한 컨텍스트를 초기화합니다. 각 작업을 자체 작은 프로그램으로 생각할 수 있습니다. 따라서 각각의 작은 프로그램은 각각의 상황을 필요로합니다. 핵심 데이터 프로그래밍 가이드의 동시성 부분을 참조하십시오. 동일한 원칙이 스레드에서 사용되는 작업에도 적용됩니다. 가장 중요한 개념은 각 개별 컨텍스트가 업데이트를 병합 할 때까지 다른 컨텍스트가 변경 한 내용을 알지 못한다는 것입니다. – TechZen

+0

모든 dispatch_async 호출이 자체 managedObjectContext를 설정해야한다는 것을 의미합니까? – terphi