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 |
Tags
- 리펙터링
- swift documentation
- uiscrollview
- ribs
- 리팩토링
- clean architecture
- Refactoring
- 애니메이션
- RxCocoa
- UICollectionView
- combine
- tableView
- UITextView
- swiftUI
- 리펙토링
- Clean Code
- 클린 코드
- Human interface guide
- Xcode
- map
- HIG
- SWIFT
- 스위프트
- MVVM
- Protocol
- Observable
- ios
- rxswift
- collectionview
- uitableview
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 3. UI 성능 분석 - Commit Hitch를 줄이는 UI 성능 최적화 프로그래밍 본문
iOS 응용 (swift)
[iOS - swift] 3. UI 성능 분석 - Commit Hitch를 줄이는 UI 성능 최적화 프로그래밍
jake-kim 2023. 1. 29. 22:181. UI 성능 분석 - Render Loop 이해하기 (Commit, Layout, Display, Prepare, Commit)
2. UI 성능 분석 - Instrument의 Animation Hitches 사용하여 UI 성능 개선하기
3. UI 성능 분석 - Commit Hitch를 줄이는 UI 성능 최적화 프로그래밍 <
뷰를 가볍게 사용하기
* 참고 애플 영상 9분10초~
- draw(rect:) 사용 지양
- draw(rect:)는 CPU를 사용하고, CALayer는 GPU를 가속하여 사용하기 때문에 main thread 부담이 적은 CALayer를 사용할 것
- draw(rect:)를 사용할 경우, 별도로 성능 측정을 수행할 것
- draw(rect:)가 필요없다면 오버라이딩으로 선언도 하지 말것
- 아무것도 안하고 draw를 override 하기만해도 더 많은 메모리와 시간을 소요
final class MyView: UIView {
override func draw(_ rect: CGRect) {
super.draw(rect)
}
}
- view 재사용하기
- 대표적인 예로 cell에서 reuseForPrepare으로부터 뷰를 removeFromSubview하지 말고, 단순히 hidden하거나 label이면 문자열을 nil을 대입하여 사용
- 뷰를 안보이게끔 할때는 remove보다는 isHidden을 사용
- isHidden은 remove보다 비용이 작은 작업
비용이 큰걸 줄이기
- layoutIfNeeded()보다 setNeedsLayout()을 사용할 것
- 2번 글에서 알아본대로 layoutIfNeed은 commit transaction이 지연되게하고 hitch를 유발
- constraint를 최소한만 사용할 것
- constraint가 많아지면 연산이 많이되어 성능 저하에 요인
- 자신의 뷰만 invalidate할 것
- 부모 뷰의 레이아웃을 invalidate하게 되면 재귀적으로 레이아웃 계산이 이루어지게 되어 비용이 비싼 작업
* 참고
'iOS 응용 (swift)' 카테고리의 다른 글
Comments