티스토리 뷰
IOS 에서 스레드를 사용 하기 위해서 병렬 혹은 직렬 큐를 생성하여 사용 할 수 있다.
디스패치-그룹을 사용 하는 방법
1. 병렬큐 생성
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
2. 직렬큐 생성
dispatch
_queue dispatch_queue_create(const char *label, dispatch_t _queue attr);_attr _t
macOS 10.7 이후버전과 IOS 4.3에서는 attr를 반드시 명시적으로 DISPATCH_QUEUE_SERIAL혹은 (NULL)로 명시 하여야 한다. 만약 비동기 큐를 만들려면 DISPATCH_QUEUE_CONCURRENT으로 입력 해야 한다. 그 이전 버전에서는 NULL이라고 명시하면 된다.
아래는 큐를 생성해여 디스패치 그룹을 이용하여 스레드를 사용하는 예제 코드이다.
- (void)thead1 { // 대스패츠 그룹을 사용하여 스레드 태스크 실행시 메인 스레드가 멈취져 있는것을 방지. dispatch_group_t group = dispatch_group_create(); // 스레드 태스크 생성1: 병렬 큐 생성 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); // 스레드 태스크 생성2: 직렬 큐 생성 // dispatch_queue_create("jp.hateblo.shin.LABEL_NAME", NULL) dispatch_group_async(group, queue, ^{ [NSThread sleepForTimeInterval:3]; NSLog(@"Done: %d", 1); }); dispatch_group_async(group, queue, ^{ [NSThread sleepForTimeInterval:3]; NSLog(@"Done: %d", 2); }); dispatch_group_async(group, queue, ^{ [NSThread sleepForTimeInterval:3]; NSLog(@"Done: %d", 3); });
dispatch_group_notify(group, queue, ^{ NSLog(@"All tasks are done!");\ }); NSLog(@"waiting..."); // group에 할당된 세개의 작업 큐가 끝날때까지 기다린다. dispatch_group_wait(group, DISPATCH_TIME_FOREVER); // do somthing after thread finished. [NSThread sleepForTimeInterval:1]; }
세마포어를 사용 하는 방법
- (void)thread2 {
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); //열쇠갯수
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
[NSThread sleepForTimeInterval:2]; // do something
NSLog(@"Finish!");
dispatch_semaphore_signal(semaphore); //열쇠갯수 늘림
});
[NSThread sleepForTimeInterval:1]; // do something
NSLog(@"waiting...");
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); //열쇠반환될때 까지 기다림
}
'IOS' 카테고리의 다른 글
레이아웃 - 스크롤뷰의 컨텐츠 추가 삭제 하기 (0) | 2018.08.28 |
---|---|
PDF 파일 생성 및 저장(UIView를 이용) (1) | 2018.03.29 |
Property (0) | 2018.03.14 |
클래스 오브젝트 초기화 (0) | 2017.03.29 |
@Property, @Synthesize, @Dynamic (0) | 2017.03.29 |