다음은 하나의 메인 그룹을 실행하고 기다린 다음 별도의 스레드에서 두 개의 다른 백그라운드 작업을 실행하고 대기 한 다음 아래에 표시된 일반 블록에서 변경된 값을 반환하는 샘플 함수입니다. 아래에 표시된 것은 이것을 수행하는 방법에 대한 나의 추측입니다. 이 블록을 모두 한 블록으로 실행하면 작동합니다. 블록을 분리하면 실패합니다. 누구든지 비슷한 것을 성취하는 방법에 대한 모범이 있습니까? 귀하의 도움에 미리 감사드립니다.그랜드 센트럴 파견. 하나의 비동기 그룹을 실행하고 대기 한 다음 다른 그룹을 실행하고 다시 대기 한 다음 완료하는 방법
-(NSString *)sampleFunction:(NSString*)inputString
{
__block NSString *returnString;
dispatch_group_t mainGroup = dispatch_group_create();
dispatch_group_t otherGroup = dispatch_group_create();
void (^firstBlock)(void) = ^(void)
{
...
};
void (^secondBlock)(void) = ^(void)
{
...
};
void (^thirdBlock)(void) = ^(void)
{
...
};
dispatch_group_async(oneGroup, dispatch_get_global_queue(0, 0), firstBlock);
dispatch_group_wait(oneGroup, sizeof(int));
dispatch_group_async(otherGroup, dispatch_get_global_queue(0, 0), secondBlock);
dispatch_group_async(otherGroup, dispatch_get_global_queue(0, 0), thirdBlock);
dispatch_group_wait(otherGroup, sizeof(int));
dispatch_release(userGroup);
dispatch_release(otherGroup);
return returnString;
}
큰 그림을 설명해주십시오. 무엇을 성취하려고합니까? 나는 기다리는 부분을 얻지 못한다. – DarkDust
그리고 왜'sizeof (int)'를'dispatch_group_wait'에 인자로 넘겨 줍니까? 당신은'DISPATCH_TIME_FOREVER'을 알고 있습니까? – DarkDust
한 스레드에서 모든 코드를 실행하지 않는 이유는 무엇입니까? 쓰레드가 끝나기를 기다리고 있다면, 쓰레드를 갖는 것이 무엇이겠습니까? –