
GCD는 iOS 에서 멀티코어 프로세서에 코드를 동시에 실행시키게 해주는 프레임워크이다.
iOS 에서 제공하는 Dispatch Queue의 종류는 세가지이다.
Queue의 종류에 따라 Queue의 특성이 다르기 때문에 작업의 특성, 원하는 일 처리 방식에 따라 Queue를 선택해야 한다.
작업의 우선 순위(Priority)로 기본적으로 설정되어 있지만, 프로그래머가 직접 명시해줄 수도 있다.
기본적으로 설정된 QoS는 아래와 같다.
userInteractive : 중요도가 높고 즉각적인 반응이 요구되는 작업(UI업데이트, 이벤트핸들링 등)일 때 사용한다. Main Thread에서 실행되는 Qos이다.userInitiated : userInteractive까진 아니더라도 유저가 빠른 결과를 기대할 때 사용한다. 저장된 파일을 열거나 할 때 사용한다.default : 작업을 분리하지 않을 때 사용되는 Qos로 기본값이다.utility : 즉각적인 결과가 필요하지 않을 때 사용한다. 프로그레스 바가 등장하는 작업에 어울린다.background : 급히 필요하지 않은 작업일 때 사용한다. 사용자에겐 보이지 않는 처리이다. (ex: 백업) background로 줄 경우 iPhone 저전력 모드에선 실행되지 않는다.unspecified : Qos 정보가 없음을 나타낸다. 시스템에게 Qos를 추론하라는 신호를 준다.기존에 멀티 스레드를 사용하려면 개발자가 직접 스레드를 생성하고 관리 했어야 했지만 GCD를 사용하면 스레드 생성, 유지, 삭제등에 개발자가 신경쓰고 개입하지 않아도 된다.
global 에서 다운 받아오더라도, 해당 데이터를 UIImageView에 넣어서 UI 업데이트 시켜주는 작업은 main에서 진행해야 함sync 로 보내게 되면 작업을 보내고 완료될 때 까지 기다린다는 의미이다.async 로 작업을 보내야 한다.sync로 보낸다면 동일한 스레드에 보내진 작업이 끝날 때 까지 보낸 작업도 수행될 수 없는 데드락 상태가 발생할 수 있다.DispatchQueue.main.sync 사용시 동일한 메인 큐로 보내진다. sync 로 보냈기 때문에 반드시 데드락 발생한다.task 를 큐에 보낸다는 것은 클로저를 보낸다는 것을 의미한다.weak self 를 써서 방지할 수 있다.[Swift] GCD에 대하여
iOS) GCD (Grand Central Dispatch)
[iOS] GCD (Grand Central Dispatch) 에 대하여