본문 바로가기

난 iOS개발자/iOS

Timer로 작업 예약하기

728x90

타이머는 실행되어야 할 작업들을 특정 시간 간격을 두고 실행할 수 있게 해준다.
타이머는 RunLoop와 동작하며, 타이머를 효과적으로 이해하려면 RunLoop 가 어떻게 동작하는지 알아야 한다.
(정리 필요)

타이머로 작업 예약하는 방법

1. 타이머의 클래스메서드를 사용하여 타이머를 생성하고 현재 런 루프에 자동 등록

timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { t in self.updateCount() })

  • timeInterval: 타이머로 지정된 작업의 시간(초)간격. 만약 0.0초를 사용하려 한다면 0.1로 사용하라고 한다.
  • repeats: 타이머의 반복 여부. 무효화될 때까지 지정한 Interval 로 block을 실행한다.
  • block: 실행할 작업

2. 타이머 객체를 만들어서 런 루프에 수동 등록

let current = Date() let fireDate = current.addingTimeInterval(10) timer = Timer.init(fire: fireDate, interval: 1, repeats: true) { t in self.updateCount() } RunLoop.current.add(timer, forMode: .common)
  • fire: 타이머의 첫번째 실행이 되어야 하는 시간 (지금으로부터 10초 뒤에 실행해~ 라고 알려줬다.)

타이머 중지! Invalidate

런 루프에 add 한 타이머는 무효화 될 때까지 지정된 간격으로 작업을 실행한다.
비반복 타이머(repeats: false)의 경우 예약된 샐행에 도달하면 자체적으로 무효화되어 invalidate가 필요없지만,
반복 타이머는 invalidate메서드를 호출하여 객체를 직접 무효화 해야한다. Invalidate는 현재 런루프에서 타이머 제거를 요청한다.
invalidate가 호출된 타이머는 더 이상 동작하지 않는다.

timer.invalidate()




예제 코드:
https://github.com/KimDuni/TimerExample

GitHub - KimDuni/TimerExample

Contribute to KimDuni/TimerExample development by creating an account on GitHub.

github.com


개발문서:
https://developer.apple.com/documentation/foundation/timer

728x90