Development Tip

NSManagedObjectContext의 performBlock : 용도는 무엇입니까?

yourdevel 2020. 11. 14. 11:10
반응형

NSManagedObjectContext의 performBlock : 용도는 무엇입니까?


iOS 5 NSManagedObjectContext에는 몇 가지 새로운 방법이 performBlock:있으며 performBlockAndWait:. 이 방법은 실제로 어떤 용도로 사용됩니까? 이전 버전에서는 무엇을 대체합니까? 어떤 종류의 블록이 그들에게 전달되어야합니까? 어떤 것을 사용할지 어떻게 결정합니까? 누군가가 그들의 사용 예를 가지고 있다면 그것은 좋을 것입니다.


방법 performBlock:과는 performBlockAndWait:당신에게 메시지를 보내는 데 사용되는 NSManagedObjectContext상무부가 사용하여 초기화 된 경우 예를 NSPrivateQueueConcurrencyTypeNSMainQueueConcurrencyType. 영구 저장소 설정 또는 변경 사항 저장과 같이 이러한 컨텍스트 유형 중 하나를 사용하여 수행하는 작업은 블록에서 수행합니다.

performBlock:블록을 백업 대기열에 추가하고 자체 스레드에서 실행되도록 예약합니다. 블록은 즉시 반환됩니다. 백업 저장소에 대한 장기 지속 작업에 사용할 수 있습니다.

performBlockAndWait:또한 블록을 백업 대기열에 추가하고 자체 스레드에서 실행되도록 예약합니다. 그러나 블록은 실행이 완료 될 때까지 반환되지 않습니다. 작업이 성공했는지 여부를 알 때까지 계속 진행할 수 없다면 이것이 귀하의 선택입니다.

예를 들면 :

__block NSError *error = nil;
[context performBlockAndWait:^{
    myManagedData.field = @"Hello";
    [context save:&error];
}];

if (error) {
    // handle the error.
}

내가했기 때문에 performBlockAndWait:블록 외부에서 오류에 액세스 할 수 있습니다. performBlock:다른 접근 방식이 필요합니다.

보내는 사람 에서 iOS 5의 핵심 데이터 릴리스 노트 :

NSManagedObjectContext는 이제 동시 작업에 대한 구조화 된 지원을 제공합니다. initWithConcurrencyType :을 사용하여 관리 객체 컨텍스트를 만들 때 스레드 (대기열) 연결에 대한 세 가지 옵션이 있습니다.

  • 제한 (NSConfinementConcurrencyType).

    이것이 기본값입니다. 컨텍스트를 작성한 스레드 이외의 다른 스레드에서 컨텍스트를 사용하지 않을 것이라고 약속합니다. (이는 이전 릴리스에서 사용한 것과 정확히 동일한 스레딩 요구 사항입니다.)

  • 개인 큐 (NSPrivateQueueConcurrencyType).

    컨텍스트는 개인 큐를 만들고 관리합니다. 컨텍스트가 연결된 스레드 또는 대기열을 만들고 관리하는 대신 여기에서 컨텍스트가 대기열을 소유하고 모든 세부 정보를 관리합니다 (아래 설명 된 블록 기반 메서드를 사용하는 경우).

  • 기본 대기열 (NSMainQueueConcurrencyType).

    컨텍스트는 기본 큐와 연관되어 있으므로 애플리케이션의 이벤트 루프에 연결되지만 그렇지 않으면 개인 큐 기반 컨텍스트와 유사합니다. 주 스레드에서만 사용해야하는 컨트롤러 및 UI 개체에 연결된 컨텍스트에이 큐 유형을 사용합니다.


이를 통해 동일한 managedObjectContext교차 스레드 에 액세스 할 수 있습니다 .

나는 내가 옳다는 것을 확신하지 못하지만 이것이 내가 그것을 사용하는 방법입니다.

당신이 사용하는 performBlockAndWait것은 "평소"와 같습니다. 하나의 스레드에서만 managedObjectContext를 실행하는 경우에는 필요하지 않습니다. 많은 스레드에서 실행하면 예가 필요합니다 performBlock.

따라서 메인 스레드에 있다면 performBlockAndWaitmain managedObjectContext. 적어도 나는 잘하고 있지 않습니다.

그러나 managedObjectContext다른 스레드에서 액세스하는 경우 예를 수행해야합니다 performBlockAndWait.

이것이 performBlock의 목적입니다 performBlockAndWait.

내가 틀렸다면 누군가 나를 바로 잡을 수 있습니까? 물론 하나의 스레드에서만 컨텍스트에 액세스하면 간단히 기본값을 사용할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/9922145/what-is-nsmanagedobjectcontexts-performblock-used-for

반응형