NSManagedObjectContext의 performBlock : 용도는 무엇입니까?
iOS 5 NSManagedObjectContext
에는 몇 가지 새로운 방법이 performBlock:
있으며 performBlockAndWait:
. 이 방법은 실제로 어떤 용도로 사용됩니까? 이전 버전에서는 무엇을 대체합니까? 어떤 종류의 블록이 그들에게 전달되어야합니까? 어떤 것을 사용할지 어떻게 결정합니까? 누군가가 그들의 사용 예를 가지고 있다면 그것은 좋을 것입니다.
방법 performBlock:
과는 performBlockAndWait:
당신에게 메시지를 보내는 데 사용되는 NSManagedObjectContext
상무부가 사용하여 초기화 된 경우 예를 NSPrivateQueueConcurrencyType
나 NSMainQueueConcurrencyType
. 영구 저장소 설정 또는 변경 사항 저장과 같이 이러한 컨텍스트 유형 중 하나를 사용하여 수행하는 작업은 블록에서 수행합니다.
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
.
따라서 메인 스레드에 있다면 performBlockAndWait
main managedObjectContext
. 적어도 나는 잘하고 있지 않습니다.
그러나 managedObjectContext
다른 스레드에서 액세스하는 경우 예를 수행해야합니다 performBlockAndWait
.
이것이 performBlock
및 의 목적입니다 performBlockAndWait
.
내가 틀렸다면 누군가 나를 바로 잡을 수 있습니까? 물론 하나의 스레드에서만 컨텍스트에 액세스하면 간단히 기본값을 사용할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/9922145/what-is-nsmanagedobjectcontexts-performblock-used-for
'Development Tip' 카테고리의 다른 글
objc_setAssociatedObject ()는 무엇이며 어떤 경우에 사용해야합니까? (0) | 2020.11.14 |
---|---|
TFS에서 특정 파일의 체크인을 항상 차단하려면 어떻게해야합니까? (0) | 2020.11.14 |
mvc : resources에 대한 주석 구성 대체-Spring (0) | 2020.11.14 |
jQuery의 ajax 메서드를 사용하여 이미지를 blob으로 검색 (0) | 2020.11.14 |
WPF의 메뉴에 구분선 배치 (0) | 2020.11.14 |