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
개발문서:
https://developer.apple.com/documentation/foundation/timer
728x90
'난 iOS개발자 > iOS' 카테고리의 다른 글
백그라운드모드에서 위치정보 가져오기 (BackgroundModes + LocationUpdates) (0) | 2022.03.04 |
---|---|
Swift의 Property (0) | 2022.03.03 |
정확한 위치 정보 (0) | 2022.02.16 |
위치 정보 가져오기(CoreLocation, CLLocationManager) (0) | 2022.02.14 |
JsonString 에서 Dictionary로 변환 (0) | 2022.01.27 |