Daily iOS
동시성

지연 작업 취소

DispatchQueue.main.asyncAfter(deadline: .now() + 2) { showTooltip() }로 예약한 작업을 사용자가 2초 안에 화면을 떠나면 취소해야 합니다. GCD로는 어떻게 구현하겠습니까?

면접관은 이 답을 어떻게 들을까요? 넘어갈지, 더 물어볼지, 떨어뜨릴지 알려 주고, 걸리는 문장은 콕 집어 줘요. 점수는 그대로예요.
짧은 답 보기

클로저를 DispatchWorkItem으로 감싸 asyncAfter에 넘기고 프로퍼티에 보관해 두었다가 화면을 떠날 때 cancel()한다. 키별로 보관해 새 예약 시 이전 것을 취소하면 디바운스로도 쓸 수 있다.

받은 질문 공유