Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 documentation
- RxCocoa
- ios
- Xcode
- 애니메이션
- scrollview
- clean architecture
- map
- UICollectionView
- tableView
- Human interface guide
- HIG
- 클린 코드
- Observable
- combine
- 리팩토링
- ribs
- swiftUI
- UITextView
- Refactoring
- 스위프트
- uiscrollview
- collectionview
- MVVM
- Protocol
- uitableview
- Clean Code
- rxswift
- 리펙토링
- SWIFT
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 최적화 - Instruments로 행 분석하는 방법 (Analyze hangs with Instruments) 본문
최적화하기
[iOS - swift] 최적화 - Instruments로 행 분석하는 방법 (Analyze hangs with Instruments)
jake-kim 2025. 10. 15. 01:10행이란?
- 사용자가 앱을 쓸 때 지연된다고 느껴지는 것
- 예) 사용자가 버튼을 누른 경우, 조금 있다가 반응한다는 느낌을 주는 것
- 애플에서 제공하는 가이드)

- 의미
| Instant | 즉각적인 | 반응이 바로 느껴질 정도로 빠름 (~100ms 이내) |
| Circumstantial | 상황에 따라 달라지는, 약간 느리지만 용인됨 | 약간의 지연(~250ms)은 사용자가 느끼지만 불편하지 않음 |
| Microhang | 미세한 멈춤 | 눈에 띄는 짧은 멈춤 (~500ms 미만) |
| Hang | 완전한 멈춤(먹통) | 반응이 끊기거나 멈춘 듯한 상태 (~500ms 이상) |
- 즉, 즉각적이려면 100ms 이내로 동작하게끔해야함
- 또 행의 기준은 500ms 이상 걸리는 동작을 의미함
행 파악하는 방법
- 위에서 알아본대로 500ms 이상 걸리는 작업을 행이라고 정의
- 이 행은 Instruments의 Time Profiler에서 확인이 가능
- Time Profiler 관련 기초 내용은 이전 포스팅 글 참고
(Instruemtns > Time Profiler 중 Hangs 부분)

- 여기서 보여지는 Severe Hang은 3.44초가 걸렸는데 단순히 오래걸린다는 의미에는 Too long 말고도 Too often도 존재
Main Thread가 바쁜 경우
- 3.44초가 걸린 행을 분석할때는 세 가지 관점으로 먼저 생각 필요
- 오래 걸림 (Too long)
- 자주 불림 (Too often)
- 메인스레드가 blocked 됨
- 이것을 어떻게 구분할 것인가?
- 우선 메인 스레드가 block된지 유무는 쉽게 파악이 가능
- hangs 부분의 하위의 Main Thread의 그래프를 보면 hang 시점에 그래프가 들쑥날쑥 보이는 것과 아예 그래프가 없는 것으로 확인이 가능

- 오래 걸림 vs 자주 불림 구분 방법
| 오래 걸림 (Too long) | 자주 불림 (Too often) | |
| Flame Graph | 가로로 긴 막대, 길게 이어짐 | 짧은 막대가 반복적으로 여러 곳에 흩어짐 |
| Call Tree | Calls 적음, Self Time 높음 | Calls 많음, Avg Time 낮음 |
| Timeline | 굵은 덩어리 하나로 CPU 점유 | 얇은 점들이 계속 반복, 일정한 패턴 |
- 코드 확인하는 방법: Time Profiler의 CPU Usage와 동일 (이전 포스팅 글 참고)
* 참고
'최적화하기' 카테고리의 다른 글
Comments