반응형
250x250
05-19 09:27
- 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
- 코테
- 프로그래머스 swift
- 스위프트
- 프로그래머스 레벨2
- 알고리즘
- 인생 명언
- swift
- swift 코딩테스트
- 감성에세이
- rxswift
- 정렬
- Design Pattern
- swift split
- dart
- datastructure
- 명언
- 프로그래머스
- 자료구조
- coding test
- 스위프트디자인패턴
- 감성 에세이
- 정렬알고리즘
- programmers
- programmer
- 코딩테스트
- sort
- 디자인패턴
- Algorithm
- swift 알고리즘
- 다트
Notice
Recent Posts
Recent Comments
Link
Archives
Bill Kim's Life...
[iOS] UI 멈춤 현상 — DispatchQueue 잘못 쓰면 앱이 멈춘다 본문
728x90
반응형
개요
iOS에서 자주 발생하는 문제:
👉 버튼 눌렀는데 앱이 멈춘 것처럼 느려짐
의미
- 메인 스레드가 블로킹됨
- UI 렌더링 중단
- 사용자 경험 급격히 나빠짐
👉 주요 원인:
- 무거운 작업을 메인 스레드에서 실행
문제 코드
@IBAction func buttonTapped(_ sender: UIButton) {
heavyTask() // ❌ 메인 스레드에서 실행됨
}
func heavyTask() {
for _ in 0...10_000_000 {
print("작업 중...")
}
}
문제:
- 메인 스레드 = UI 담당
- 무거운 작업 실행 → UI 멈춤
해결 코드
방법 1: 백그라운드에서 처리
DispatchQueue.global().async {
self.heavyTask()
}
방법 2: UI 업데이트는 메인에서
DispatchQueue.global().async {
let result = self.heavyTask()
DispatchQueue.main.async {
self.label.text = "완료: \(result)"
}
}
방법 3: QoS 설정 (실무 디테일)
DispatchQueue.global(qos: .userInitiated).async {
self.heavyTask()
}
QoS:
- .userInitiated → 사용자 액션 직후
- .background → 백그라운드 작업
한 줄 정리
무거운 작업은 백그라운드, UI는 메인 — 이 규칙 깨면 앱 멈춘다
728x90
반응형
'DEV Tips > iOS' 카테고리의 다른 글
| [iOS] UITableView 셀 재사용 버그 — 데이터가 섞이는 진짜 이유 (0) | 2026.03.22 |
|---|---|
| [iOS] weak vs unowned — iOS에서 크래시 나는 진짜 이유 (0) | 2026.03.22 |
| [iOS] iOS 메모리 누수의 핵심 — Retain Cycle 한 번에 끝내기 (0) | 2026.03.22 |
| [iOS] reloadData 했는데 UI가 안 바뀐다? iOS에서 가장 흔한 실수 (0) | 2026.03.22 |
| [iOS] iOS Auto Layout 에러 — “Unable to simultaneously satisfy constraints” 해결법 (0) | 2026.03.22 |
Comments
