Computer >> 컴퓨터 >  >> 프로그래밍 >> iOS

iOS에서 일정한 시간 간격으로 반복 작업을 실행하는 방법

iOS 개발을 하다 보면 특정 작업을 일정한 시간 간격으로 반복적으로 실행해야 하는 경우가 자주 발생합니다. 예를 들어 타이머 표시, 주기적인 데이터 갱신, 애니메이션 처리 등이 대표적입니다.

Timer 클래스란?

애플은 이러한 요구를 해결하기 위해 Timer라는 클래스를 기본적으로 제공합니다. Timer는 설정된 시간 간격이 경과할 때마다 지정된 대상 객체(target)에 특정 메시지(메서드 호출)를 전송하는 방식으로 동작합니다.

Timer 클래스에 대한 자세한 내용은 애플 공식 문서에서 확인할 수 있습니다.
https://developer.apple.com/documentation/foundation/timer

이번 글에서는 Timer 클래스를 활용해 5초마다 "hello"를 콘솔에 출력하는 샘플 앱을 만들어 보겠습니다.

프로젝트 생성하기

1단계: Xcode를 실행하고 New Project → Single View Application을 선택한 뒤, 프로젝트 이름을 "HelloTutorialsPoint"로 지정합니다.

2단계: ViewController.swift 파일을 열고 viewDidLoad() 메서드 아래에 doSomething() 메서드를 하나 추가합니다. 그리고 아래 코드를 doSomething() 메서드 안에 작성합니다.

private func doSomething() {
    let timer = Timer.scheduledTimer(timeInterval: 5.0, target: self,
        selector: #selector(ViewController.hello), userInfo: nil, repeats: true)
}

여기서 timeInterval: 5.0은 작업이 반복될 시간 간격(초 단위)을 의미하며, repeats: true로 설정했기 때문에 타이머가 무한히 반복 실행됩니다.

셀렉터 메서드 구현하기

3단계: 타이머가 호출할 hello() 메서드를 아래와 같이 구현하고, viewDidLoad() 내부에서 doSomething()을 호출합니다.

@objc func hello() {
    print("hello")
}

Objective-C 런타임에서 셀렉터로 호출되어야 하기 때문에 반드시 @objc 키워드를 붙여야 한다는 점에 유의하세요.

완성된 전체 코드

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // 뷰 로딩 후 추가 설정을 진행합니다.
        self.doSomething()
    }

    private func doSomething() {
        let timer = Timer.scheduledTimer(timeInterval: 5.0, target: self,
            selector: #selector(ViewController.hello), userInfo: nil, repeats: true)
    }

    @objc func hello() {
        print("hello")
    }
}

실행 결과 확인하기

모든 준비가 끝났습니다. 앱을 빌드하고 실행한 뒤 콘솔 출력을 확인해 보세요. 앱이 시작된 지 5초 후부터 "hello"가 5초 간격으로 계속 출력되는 것을 확인할 수 있습니다.

iOS에서 일정한 시간 간격으로 반복 작업을 실행하는 방법

참고: Timer 사용 시 알아두면 좋은 점

Timer는 기본적으로 현재 Run Loop의 default 모드에 추가됩니다. 따라서 UIScrollView를 스크롤하는 등 UI 이벤트가 활발하게 발생하는 동안에는 타이머가 일시적으로 멈출 수 있습니다. 스크롤 중에도 타이머를 유지하고 싶다면 Run Loop의 .common 모드에 타이머를 직접 추가하는 방법을 고려해 보세요.