Do.

Run Loop vs DispatchQueue 본문

iOS

Run Loop vs DispatchQueue

Hey_Hen 2022. 3. 13. 18:25

Combine을 사용할 때, debounce와 같은 오퍼레이터를 사용하면 scheduler를 지정해 주어야 한다. (그 외에도 scheduler를 지정해주는 상황)

이때 지정해 줄 수 있는 것은 RunLoop.mainDispatchQueue.main 인데 이 둘은 무슨 차이일까?

query.debounce(for: .milliseconds(800), scheduler: RunLoop.main)
query.debounce(for: .milliseconds(800), scheduler: DispatchQueue.main)

직접 실행해 보면 얼핏 차이가 없는 것처럼 보이지만 실제로는 중요한 차이가 있다.

 

RunLoop.main 를 스케줄러로 사용하면 사용자의 터치 반응 등의 이벤트가 전달되지 않는다.


따라서 스크롤 중에는 debounce가 제대로 되지 않는 다는 뜻

 

반면 DispatchQueue.main 터치 반응 등의 이벤트가 동작 하는 도중에도 이벤트가 전달이 된다.

 

RunLoop.mainRunLoop.main.perform 을 호출하고 DispatchQueue.main

DispatchQueue.main.async를 호출하기 때문!

 

 

출처: https://stackoverflow.com/questions/56724566/runloop-vs-dispatchqueue-as-scheduler/58849015#58849015

Comments