GCD 학습 의--Dispatch Group
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIOROTY_DEFAULT,0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group,queue,^{NSLog(@"blk0");p});
dispatch_group_async(group,queue,^{NSLog(@"blk1");p});
dispatch_group_async(group,queue,^{NSLog(@"blk2");p});
dispatch_group_notify(group,dispatch_get_main_queue(),^{NSLog(@"done");});
dispatch_release(group);
실행 결 과 는:
blk1
blk2
blk0
done
Global Dispatch Queue 즉 Concurrent Dispatch Queue 에 추가 처리 하고 여러 스 레 드 를 병행 하기 때문에 추가 처리 의 실행 순서 가 정 해 지지 않 습 니 다.실행 시 변화 가 발생 하지만 이 실행 결과 의 done 은 반드시 마지막 으로 출력 됩 니 다.어떤 디 스 패 치 큐 에 추가 처리 하 든 디 스 패 치 그룹 을 사용 하면 이 처리 가 끝 나 는 것 을 감시 할 수 있 습 니 다.모든 처리 가 끝 난 것 을 감지 하면 끝 난 처 리 를 Dispatch Queue 에 추가 할 수 있 습 니 다.디 스 패 치 그룹 을 사용 하 는 이유 다.우선 발송group_create 함수 생 성의 dispatchgroup_t 형식의 Dispatch Group.파견group_create 함수 명 에 포 함 된 create 에 따 르 면 이 Dispatch Group 은 Dispatch Queue 와 같 으 며 사용 종료 후 dispatch 를 통과 해 야 합 니 다.release 함수 방출.dispatch_group_async 함수 와 dispatchasync 함수 가 같 습 니 다.지정 한 Dispatch Queue 에 Block 을 추가 합 니 다.와 dispatchasync 함 수 는 생 성 된 Dispatch Group 을 첫 번 째 인자 로 지정 합 니 다.지정 한 Block 은 지정 한 Dispatch Group 에 속 합 니 다.또한,dispatch Queue 에 Block 을 추가 할 때 와 마찬가지 로 Blocks 는 dispatch 를 통 해retain 함수 가 Dispatch Group 을 가지 고 있어 서 이 Block 은 Dispatch Group 에 속 합 니 다.이렇게 Block 실행 이 끝나 면 이 Block 은 dispatch 를 통 해release 함수 가 가지 고 있 는 Dispatch Group 을 풀 어 줍 니 다.Dispatch Group 사용 이 끝나 면 해당 Dispatch Group 에 속 하 는 Block 을 고려 하지 않 고 즉시 dispatchrelease 함 수 를 풀 면 됩 니 다.Dispatch Group 에 추 가 된 처리 가 모두 실 행 될 때 이 소스 코드 에 사 용 된 dispatchgroup_notify 함 수 는 실 행 된 Block 을 Dispatch Queue 에 추가 하고 첫 번 째 인 자 를 감시 할 Dispatch Group 으로 지정 합 니 다.이 디 스 패 치 그룹 에 추 가 된 모든 처리 가 끝 날 때 세 번 째 인자 인 Block 을 두 번 째 인자 인 디 스 패 치 큐 에 추가 합 니 다.dispatchgroup_notify 함수 에서 어떤 디 스 패 치 큐 를 만 들 든 디 스 패 치 그룹 에 속 하 는 모든 처 리 는 추가 로 지정 한 Block 에서 실 행 됩 니 다.또한,Dispatch Group 에서 도 dispatch 를 사용 할 수 있 습 니 다.group_wait 함 수 는 모든 처리 가 끝 날 때 까지 만 기 다 립 니 다.
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIOROTY_DEFAULT,0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group,queue,^{NSLog(@"blk0");p});
dispatch_group_async(group,queue,^{NSLog(@"blk1");p});
dispatch_group_async(group,queue,^{NSLog(@"blk2");p});
dispatch_group_wait(group,DISPATCH_TIME_FOREVER);
dispatch_release(group);
dispatch_group_wait 함수 의 두 번 째 매개 변 수 는 대기 시간(시간 초과)으로 지정 되 어 있 습 니 다.dispatch 에 속 합 니 다.time_t 형식의 값.이 소스 코드 는 DISPATCH 를 사용 합 니 다.TIME_FOREVER 는 영원한 기다 림 을 의미한다.디 스 패 치 큐 에 속 하 는 처리 가 완료 되 지 않 은 경우 계속 대기 하 며,도중에 취소 할 수 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.