반응형
250x250
05-19 09:27
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] UI 멈춤 현상 — DispatchQueue 잘못 쓰면 앱이 멈춘다 본문

DEV Tips/iOS

[iOS] UI 멈춤 현상 — DispatchQueue 잘못 쓰면 앱이 멈춘다

billnjoyce 2026. 3. 22. 20:48
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
반응형
Comments