Render loop 정리 (작성중)

Render loop란

유저가 앱과 상호작용하기 시작할 때, 새로운 프레임이 렌더링된다.

(아이폰 또는 아이패드 유저는 60Hz 프레임 레이트를 갖는다. 각 프레임 시간은 16.67ms(1/60)이다.)

이렇게 화면에 새 프레임을 렌더링하는 주기를 “Render loop" 라고 한다.

 

Render loop의 목적은 모든 뷰가 모든 프레임에 대해 의도한대로 표시되도록하는 것이고

이 구성 요소를 이해하면 레이아웃 변경과 같은 가능한 함정에 빠지지 않게 된다.

또한 중복 작업을 피하는 데 매우 유용하다.

 

Render loop는 다음의 세 단계로 구성된다.

1. Update Constraints (레이아웃 계산)

2. Layout (이전 단계의 레이아웃 값을 뷰에 입력)

3. Display (레이아웃 bounds 내에서 뷰의 사용자 인터페이스를 렌더링)

 

 

먼저 필요한 모든 뷰는 updateConstraints를 받는다.

그리고 이는 대부분의 리프에서 window를 향한 뷰 계층 구조까지 실행된다.

다음으로 모든 뷰는 layoutSubViews 를 받는다.

윈도우에서 시작하여 리프까지 진행된다.

마지막으로, 필요한 경우 모든 뷰가 그려진다.

 

Update Constraints Layout Display
updateConstraints() layoutSubviews() draw(_:)
setNeedsUpdateConstraints() setNeedsLayout() setNeedsDisplay()
updateConstraintsIfNeeded() layoutIfNeeded() -

 

'iOS' 카테고리의 다른 글

NSCache와 Purgeable Memory  (0) 2021.04.02
OptionSet을 준수하는 커스텀 타입 작성하기  (0) 2021.04.01
CustomStringConvertible  (0) 2021.03.27
[UIKit] Scrollable StackView 만들기  (0) 2021.03.26
Autoresizing과 AutoresizingMask  (0) 2021.03.25

댓글