본문 바로가기
iOS & macOS

UI Delay, UI Freezing

by Bokoo14 2024. 9. 21.

UI 딜레이(Delay) 현상과 UI 프리징(Freezing) 현상은 모두 앱의 성능과 사용자 경험에 부정적인 영향을 미친다.

UI 딜레이는 사용자가 느끼는 반응이 느려지는 것이며, UI 프리징은 아예 UI가 멈추는 문제입니다. 두 문제 모두 성능 최적화와 스레드 관리를 통해 개선할 수 있다.

UI 딜레이 (UI Delay)

UI 딜레이는 앱의 사용자 인터페이스가 사용자의 입력에 대해 느리게 반응하는 현상

이는 UI가 정상적으로 동작하지만, 반응 시간이 길어져 사용자가 느끼는 체감 속도가 느려지게 되는 경우이다.

원인:

  • 메인 스레드에서의 과부하: iOS의 UI 작업은 메인 스레드에서 처리됩니다. 메인 스레드에서 복잡한 연산이나 긴 작업(네트워크 요청, 파일 읽기/쓰기 등)을 처리하게 되면 UI가 느려지게 된다.
  • 불필요한 데이터 처리: 대량의 데이터나 복잡한 계산을 UI 렌더링 중에 처리할 경우, UI 업데이트가 지연될 수 있다.
  • 애니메이션 성능 저하: 고해상도 이미지나 복잡한 애니메이션을 사용할 때도 프레임 속도가 떨어져 딜레이가 발생할 수 있다.

증상:

  • 느린 애니메이션: 버튼을 눌렀을 때 애니메이션이 부드럽게 실행되지 않거나, 화면 전환이 느리게 반응하는 현상
  • 터치 지연: 사용자의 터치 입력에 대해 UI가 즉각적으로 반응하지 않고, 약간의 지연이 발생

UI 프리징 (UI Freezing)

UI 프리징은 앱의 UI가 완전히 멈추거나 응답하지 않는 현상입니다. 사용자가 화면을 터치하거나 조작했을 때 아무 반응이 없고, 일정 시간 동안 앱이 정지된 것처럼 보인다.

이 상태에서는 UI가 전혀 동작하지 않고, 강제로 앱을 종료해야 할 수도 있다.

원인:

  • 메인 스레드의 블로킹 작업: 메인 스레드에서 너무 오랜 시간 동안 차단(blocking) 작업(예: 무한 루프, 동기적 네트워크 요청, 대용량 파일 처리 등)이 실행될 경우 UI가 완전히 멈춘다.
  • 메모리 부족: 앱이 과도하게 메모리를 사용하여 시스템에서 강제로 스레드를 중단시킬 때 발생할 수 있다.
  • 데드락 (Deadlock): 여러 스레드가 동시에 자원을 요청하면서 서로 대기 상태에 빠질 때 UI가 멈출 수 있다.

증상:

  • UI 완전 멈춤: 화면이 멈추고, 사용자 입력이 전혀 반응하지 않음. 앱이 응답하지 않다가 강제로 종료되기도 함.
  • 강제 종료: 너무 오랜 시간 동안 UI가 멈추면 시스템에서 앱을 강제 종료시킬 수 있음.

차이

  UI Delay UI Freezing
정의 UI가 느리게 반응하는 현상 UI가 완전히 멈추는 현상
원인 메인 스레드 과부하, 느린 데이터 처리 메인 스레드 블로킹, 메모리 부족, 데드락
증상 터치, 애니메이션의 느린 반응 UI가 전혀 반응하지 않음
해결 방법 메인 스레드에서 무거운 작업 비동기 처리 블로킹 작업 분리, 데드락 방지, 메모리 관리

해결 방법

  • UI 딜레이:
    • 메인 스레드에서 오래 걸리는 작업을 비동기적으로 처리 (예: DispatchQueue.global().async)
    • 뷰 업데이트는 항상 메인 스레드에서 처리 (예: DispatchQueue.main.async)
    • 이미지 처리, 네트워크 요청 등은 백그라운드 스레드에서 처리하고, 완료 후 UI 업데이트만 메인 스레드에서 수행.
  • UI 프리징:
    • 메인 스레드에서 동기 작업을 피하고, 복잡한 연산이나 파일 작업을 백그라운드 스레드로 분리.
    • 데드락이 발생하지 않도록 멀티스레드 작업 관리.
    • 메모리 사용을 최적화하고, 메모리 경고를 처리하여 앱이 정상적으로 작동하게 함.