반응형
250x250
05-21 09:08
Today
Total
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Notice
Recent Posts
Recent Comments
Link
Archives
관리 메뉴

Bill Kim's Life...

[iOS] Timer 메모리 누수 — invalidate 안 하면 앱이 계속 살아있다 본문

DEV Tips/iOS

[iOS] Timer 메모리 누수 — invalidate 안 하면 앱이 계속 살아있다

billnjoyce 2026. 3. 22. 20:53
728x90
반응형

개요

iOS에서 자주 놓치는 문제:

👉 Timer를 사용했는데 ViewController가 해제되지 않음


의미

  • Timer는 실행되는 동안 target을 계속 참조함
  • invalidate 하지 않으면 계속 살아있음

👉 결과:

  • ViewController deinit 안 됨
  • 메모리 누수 발생

문제 코드

class ViewController: UIViewController {

    var timer: Timer?

    override func viewDidLoad() {
        super.viewDidLoad()

        timer = Timer.scheduledTimer(
            withTimeInterval: 1.0,
            repeats: true
        ) { _ in
            print("tick")
        }
    }

    deinit {
        print("deinit") // ❌ 호출 안 됨
    }
}

👉 문제:

  • Timer가 계속 실행됨
  • self가 해제되지 않음

해결 코드

방법 1: 반드시 invalidate

deinit {
    timer?.invalidate()
}

👉 가장 기본이자 필수


방법 2: weak self 사용 (retain cycle 방지)

timer = Timer.scheduledTimer(
    withTimeInterval: 1.0,
    repeats: true
) { [weak self] _ in
    self?.doSomething()
}

방법 3: viewWillDisappear에서 정리 (실무 추천)

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    timer?.invalidate()
}

👉 화면 나갈 때 바로 정리


한 줄 정리

👉 Timer는 자동 종료되지 않는다 — invalidate 안 하면 메모리 누수

728x90
반응형
Comments