인프런 커뮤니티 질문&답변
GCD 사용 중 질문 드립니다!
해결된 질문
작성
·
198
1
안녕하세요, GCD 강의 챕터 수강 중에 질문 있어 글 작성드립니다.
예제의 asyncTiltShift함수에서 runQueue와 completionQueue를 구별하는 이유가 있을까요? completionQueue에서는 단순히 completionHandler 처리만 하기 때문에 따로 Queue에 task를 할당하는 이유가 있는지, 아래 코드처럼 바꿔줘도 상관없는지 궁금합니다!
func asyncTiltShift2(_ inputImage: UIImage?, runQueue: DispatchQueue, completion: @escaping (UIImage?, Error?) -> ()) {
runQueue.async {
var error: Error?
error = .none
let outputImage = tiltShift(image: inputImage)
completion(outputImage, error)
}
}설명 친절하고 상세하게 해주셔서 늘 감사드립니다 :)
답변 1
1
앨런(Allen)
지식공유자
안녕하세요! 냥쥐님!
네네 당연히 말씀하신대로 만드신 방식대로의 코드식으로 바꾸셔도 상관없죠 ^^
런큐와 컴플리션큐를 구별해놓은 이유는 단순히 일반적으로 비동기 처리한 후에 일이 끝나면 UI작업을 메인쓰데드로 보내는 것과 같은 일을 처음부터 분리 시킬 수 있도록 하기 위해 코드를 수업 내용식으로 짠 것이고,
만약에 냥쥐님 처럼 짜신다면...
런큐가 만약에 2번쓰레드에서 일이 일어난다면, 컴플리션핸들러의 클로저도 동일하게 2번쓰레드에서
일어나겠구나만, 명심해서 사용하시면 된다고 생각합니다.
아니면, 만드신 ayncThiltShift함수를 실행하시고, 콜백내용을 정의하는 클로저 내부에서
메인쓰레드로 다시 보내는 내용을 넣으시면 되겠죠 ^^
수업을 수강해주셔서 감사합니다. :)





