2016-07-02 2 views
0

performBlock을 사용하는 개인 컨텍스트에서 CoreData (CRUD) 작업을 트리거하고 dispatch_async 백그라운드 큐의 주 컨텍스트를 사용하여 이러한 작업을 트리거하는 것과 다른 점이 있습니까?CoreData 및 NSManagedObject 컨텍스트 - 프라이빗 대 메인

단순히 배경 스레드에서 주 컨텍스트를 사용하지 않아야하는 경우입니까?

사과 문서로 연결되는 링크는 here입니다.

답변

3

은 백그라운드 스레드의 기본 대기열 컨텍스트를 사용하지 마십시오. 이는 스레드 제한 규칙을 위반합니다.

메인 대기열 컨텍스트는 메인 대기열 (UI 대기열/스레드) 또는 performBlock에서만 액세스해야합니다. 비 UI 관련 작업을 수행해야하는 경우 개인 대기열 컨텍스트를 만들고 performBlock을 통해 액세스해야합니다.

코어 데이터 스레딩이 올바른지 확인하려면 -com.apple.CoreData.ConcurrencyDebug 1 런타임 설정을 사용하도록 설정할 수 있습니다.

+0

알겠습니다. 그러나 두 가지 옵션을 테스트했으며 둘 다 작동하는 것 같습니다. 그래서 내 질문은 이것이 금지 된 접근 방식이 작동하는 것이 행운인지 여부입니다. ... – goggelj

+0

이것은 대부분의 시간 동안 작동하고 데이터 손상 위험이 높은 프로덕션에서 실패하는 것을 의미하는 스레딩 위반입니다. 이것이 디버그 설정이 존재하는 이유입니다. 스레딩 버그가 일관되게 나타나지 않기 때문입니다. –

관련 문제