inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

앨런 iOS Concurrency(동시성) - 디스패치큐와 오퍼레이션큐의 이해

1) 반드시 메인큐에서 처리해야하는 작업 2) sync메서드에 대한 주의사항 3) weak, strong캡처 주의 4)컴플리션핸들러의 존재이유 5) 동기적함수를 비동기함수 처럼 만드는 방법

동기적 함수를 비동기적 함수로 바꾸는 부분에서 질문 있습니다

해결된 질문

289

구본성

작성한 질문수 5

1

func asyncTiltShift(_ inputImage: UIImage?, runQueue: DispatchQueue, completionQueue: DispatchQueue, completion: @escaping (UIImage?, Error?) -> ()) {
    
    runQueue.async {
        var error: Error?
        error = .none
        
        let outputImage = tiltShift(image: inputImage)
        
        completionQueue.async {
            completion(outputImage, error)
        }
    }
}

runQueue는 이미 비동기로 돌아가고 있는데 굳이 completionQueue에서 다시 한번 더 비동기로 돌아가게 만드는 이유가 무엇인가요?

 

강의 너무 잘 듣고 있습니다 :)

ios swift

답변 2

2

구본성

빠른 답변 감사합니다!

2

앨런(Allen)

안녕하세요 본성 님!

원하시면 굳이 comletionQueue를 만드실 필요가 없습니다. 다만, 일반적으로 콜백함수가 main큐에서 일해야하는 경우가 많기 때문에 함수를 그런식으로 설계했을 뿐입니다.

func asyncTiltShift(_ inputImage: UIImage?, runQueue: DispatchQueue, completionQueue: DispatchQueue, completion: @escaping (UIImage?, Error?) -> ()) {
    
    runQueue.async {
        var error: Error?
        error = .none
        
        let outputImage = tiltShift(image: inputImage)
        
        completionQueue.async {
            completion(outputImage, error)
        }
    }
}

위처럼 하셔도 되고,

아래처럼 completionQueue없이 설계하신 다음

func asyncTiltShift(_ inputImage: UIImage?, runQueue: DispatchQueue, completion: @escaping (UIImage?, Error?) -> ()) {
    
    runQueue.async {
        var error: Error?
        error = .none
        
        let outputImage = tiltShift(image: inputImage)
       
        completion(outputImage, error)
    }
}

 

호출할때 이런식으로 하셔도 되겠죠.

ayncTiltShift(someImage, runQueue: someQueue) { image, error in
       DispatchQueue.main.async {
              // image처리 관련 코드
       }
}


일반적으로 비동기적인 일이 끝나고 메인 쓰레드로 보낼일이 많으니.. 함수 설계에서, 완료된 콜백함수를 실행시키는 큐를 넣을 수 있도록 만들 었을 뿐입니다.

감사합니다. :)

오퍼레이션 큐 질문

0

130

2

2) 오퍼레이션큐(OperationQueue) 강의 질문입니다

0

146

2

warning 뜸

0

152

1

수업자료 markup 에 대해 궁금합니다!

0

277

1

예제 프로젝트 빌드 실패

0

332

2

serial 큐 질문드립니다.

0

252

1

[7-3.DispatchBarrier] 예제 코드 질문

0

328

1

안녕하세요, GCD 관련 질문드립니다..

0

286

1

main.async 작동 질문(+ vs global(),async)

0

432

1

dismiss 되었을 때 종료질문

0

307

1

'동기'와 '동시성 프로그래밍'에 대해 질문드립니다.

0

496

2

Dependency Protocol 관련

1

366

1

시리얼 큐와 sync 관련

0

466

2

sync이지만 Queue에 넣으면 async로 동작한다는 말의 의미

0

650

1

lazy var 이슈로 생긴 여러 변수들은 어디에 있나요?

0

385

1

global큐에 sync로 작업을 보냈을 때는 터지지 않는 이유가 궁금합니다.

1

504

2

비동기 개념에서 무엇을 return하는 거죠??

0

391

1

안녕하세욤

1

341

1

Barrier 작업 관련 질문입니다.

1

343

1

디스패치 그룹

1

382

1

global async안에 global async를 만들게되면 어떻게 되나요??

2

383

2

비동기오퍼레이션 관련 질문

1

373

1

강의자료는 어디에 있나요?

1

323

1

AsyncOperation을 async await Task로 대체 가능한 지에 대한 질문

1

415

1