article thumbnail image
Published 2022. 11. 18. 15:01

오늘 포스팅에서는 View가 어떻게 그려지는지에 알아보자

View가 어떻게 알아보기 이전에 Main Run Loop과, Update Cycle에 대해 알 필요가 있는데,

이에 대해 먼저 알아보자. 

 

Main Run Loop

우선 Run Loop이란,

input source와 timer source 라는 2종류의 이벤트를 처리하는 루프이다. 

(input source는 소켓, 키보드, 마우스, 터치 등의 입력 소스)

이는 Thread를 생성시 자동으로 생성이 되며, 실행 시키기 위해서는 직접 코드를 통해 실행을 해야한다.

 

Main Run(event) Loop은,

Main Thread에서 실행되는 Run Loop으로, UIApplicaion 객체에 의해 자동으로 실행된다. 

즉, 일반 Run Loop가 다르게 직접 코드를 통해 실행할 필요가 없다.

또한, 이 Main Run Loop은 O/S(operating System)으로 부터 input source 이벤트를 전달 받는다.

 

  • User interaction(Input source) 이벤트가 일어나면,
  • O/S를 통해 Event Queue에 들어가게 된다. (Timer의 경우에는 O/S를 통해 들어오지 않는다.)
  • Event Queue에서 FIFO 방식으로 Event를 하나씩 Main Run Loop에 전달한다. 
  • Main Run Loop은 해당 이벤트를 UIApplicaion 객체로 전달하고, 
  • UIApplication은 이벤트를 처리 할 수 있는 Core Object로 전달한다. 
  • Core Object에 전달된 이벤트는 적절한 Handler를 거쳐 수행이 된후 
  • 다시 제어권이 Main Run Loop으로 돌아온다
  • Main Run Loop으로 돌아오면 Update Cycle이 실행이 된다.

UIApplication 부터 Handler까지 좀더 자세하게 살펴보자면, 

UIApplication은 이벤트를 AppDelegate로 보내게 되면,

해당 이벤트가 발생된 window를 가지고 있는 Scene에 보내게 된다.

Scene은 적절한 window에 보내게 되고, window는 view에 보내게 된다.

해당 View에서 Handler를 찾는다

없다면 responder chain에 수행할 Handler를 찾고, 이마저도 없으면 discard된다. (대부분 handler를 구현 안하는 경우)

 

Core Object에 대한 명확한 설명이 없지만,

개인적인 생각으로, UIApplication에서 window객체 까지의 과정을 Core Object라고 표현한것 같다.

 

Update Cycle

전에도 보았듯이, Handler에서의 이벤트 처리가 끝나면, 

통제권은 Main Run Loop으로 돌아오게 되고,

Update Cycle이 시작된다.

Update Cycle에서는 view들을 Layout, Constraints, Display 한다.

즉, 해당 Update Cycle에서 view들이 다시 그려지거나, 재배치 된다. 

 

Event를 통한 view 들의 변화는 바로 이루어지는 것이 아닌! update cycle에서 일어나는 것이다. 

그렇다면, delay가 있다는 뜻인데, iOS는 초당 60프레임을 지원하기 때문에, 우리가 체감하기에는 어렵다. 

 

Reference

복사했습니다!