관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 3. UI 성능 분석 - Commit Hitch를 줄이는 UI 성능 최적화 프로그래밍 본문

iOS 응용 (swift)

[iOS - swift] 3. UI 성능 분석 - Commit Hitch를 줄이는 UI 성능 최적화 프로그래밍

jake-kim 2023. 1. 29. 22:18

1. 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하게 되면 재귀적으로 레이아웃 계산이 이루어지게 되어 비용이 비싼 작업

* 참고

https://developer.apple.com/videos/play/tech-talks/10856/

Comments