iOS & Swift 공부 - DispatchQueue

김영채 (Kevin)·2021년 3월 9일
0

iOS & Swift

목록 보기
88/107
  • 작업 항목의 실행을 관리하는 클래스
  • Queue 에 추가된 작업항목은 시스템이 관리하는 Thread Pool 에서 처리하고 작업을 완료하면 Thread 를 알아서 해제한다

언제 주로 사용?

→ 서버에서 데이터를 내려받는다든지, 이미지, 동영상 등 멀티미디어 처리와 같이 CPU 사용량이 많은 처리를 별도의 Thread 에서 처리한 뒤 Main Thread 로 결과를 전달하여 화면에 표시한다.

  • DispatchQueue 의 기본 유형은 Serial → Concurrent 로 바꾸려면 별도 명시 필요

Queue 유형


Serial

  • Queue 에 등록한 순서대로 작업을 실행한다.
  • 하나의 작업을 실행하고 실행이 끝날 때까지 Queue 에 있는 다른 작업을 미루고 있다가 이전 작업이 끝나면 실행된다.

Concurrent

  • 실행 중인 작업이 끝나기를 기다리지 않고, Queue 에 있는 작업을 동시에 별도의 Thread 를 사용하여 실행한다. ( Concurrently )
  • 병렬처리 방식

주요 프로퍼티

  • main : 애플리케이션의 메인 스레드와 연결된 Serial DispatchQueue를 반환.

     class var main: DispatchQueue { get }
  • label : 대기열(Queue)을 식별하기 위한 문자열 레이블.

     var label: String { get }
  • qos : DispatchQoS구조체의 타입의 프로퍼티. 대기열 작업을 효율적으로 수행할 수 있도록 여러 우선순위 옵션을 제공합니다.

     var qos: DispatchQoS { get }

주요 메서드

  • sync(execute:) : DispatchQueue에서 실행을 위해 클로저를 대기열(Queue)에 추가하고 해당 클로저가 완료될 때까지 대기합니다.

    func sync(execute block: () -> Void)
  • async(execute:) : DispatchQueue에서 비동기 실행을 위해 클로저를 추가하고 즉시 실행합니다.

     func async(execute workItem: DispatchWorkItem)
  • asyncAfter(deadline:execute:) : 지정된 시간에 실행하기 위해 클로저를 DispatchQueue에 추가합니다. 그리고 지정된 시간이 지나면 바로 실행합니다.

     func asyncAfter(deadline: DispatchTime, execute: DispatchWorkItem)
  • global(qos:) : 시스템의 글로벌 대기열(Queue)을 반환

    class func global(qos: DispatchQoS.QoSClass = default) -> DispatchQueue

위 내용은 "https://www.boostcourse.org/mo326/lecture/16917" 을 참고하여 공부한 내용을 정리하였습니다.

profile
맛있는 iOS 프로그래밍

0개의 댓글