반응형
250x250
05-21 09:08
- Today
- Total
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- programmer
- 감성 에세이
- Algorithm
- 정렬알고리즘
- datastructure
- swift 알고리즘
- 스위프트
- programmers
- 프로그래머스
- rxswift
- sort
- swift split
- 프로그래머스 레벨2
- dart
- 감성에세이
- 코테
- 알고리즘
- Design Pattern
- 명언
- 스위프트디자인패턴
- 다트
- 정렬
- swift
- 인생 명언
- 디자인패턴
- coding test
- 자료구조
- swift 코딩테스트
- 코딩테스트
- 프로그래머스 swift
Notice
Recent Posts
Recent Comments
Link
Archives
Bill Kim's Life...
[iOS] Timer 메모리 누수 — invalidate 안 하면 앱이 계속 살아있다 본문
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
반응형
'DEV Tips > iOS' 카테고리의 다른 글
| [iOS] 앱 실행 시 print가 안 찍힘 / 코드 실행 안 됨 (0) | 2026.03.22 |
|---|---|
| [iOS] UserDefaults 값이 안 바뀐다? 저장했는데 반영 안 되는 이유 (0) | 2026.03.22 |
| [iOS] NotificationCenter 버그 — removeObserver 안 하면 생기는 문제 (0) | 2026.03.22 |
| [iOS] 이미지 깜빡임 & 잘못된 이미지 표시 — 비동기 로딩의 함정 (0) | 2026.03.22 |
| [iOS] UITableView 셀 재사용 버그 — 데이터가 섞이는 진짜 이유 (0) | 2026.03.22 |
Comments
