Run Loop

박성민·2021년 2월 6일
0

iOS

목록 보기
14/30

RunLoop는 앱 구동간에 생성되는 Thread와 함께 생성되어 해당 Thread가 수행해야 할 이벤트들을 핸들링하여 적절한 수행을 요청하고, 이벤트 처리가 종료되면 대기 상태로 접어들어 다음 이벤트에 대한 모니터링을 해주는 추상화입니다.

RunLoop의 구조

  1. iOS에서 이벤트 소스에서 이벤트가 발생하면 스레드르 깨운 후 이벤트를 런루프로 전달한다.
  2. 이벤트를 받은 런루프에서 등록된 핸들러를 통해 이벤트를 처리한다.
  3. 처리할 이벤트가 없을 때에는 스레드를 대기상태로 변화시킨다.

런루프는 두 가지 유형의 소스에서 이벤트를 수신한다.

  • Input source는 일반적으로 다른 스레드 또는 다른 애플리케션의 메시지와 같은 비동기 이벤트를 전달한다.
  • Timer source는 예약된 시간 또는 반복 간격으로 발생하는 동기 이벤트를 제공한다.
  • 두 유형의 소스 모두 이벤트가 도착하면 처리할 애플리케이션 별 핸들러를 사용한다.

Main RunLoop

UIApplication 객체는 앱이 실행될때,이벤트가 처리될 때, 뷰 기반의 인터페이스에서 업데이트가 발생할 때 setup됩니다. 그리고 Main Run Loop를 실행합니다. 그리고 이 Main Run Loop는 앱의 Main Thread에서 실행됩니다.

  1. 유저가 이벤트를 일으킨다.(터치, 줌인 등)
  2. 시스템을 통해 이벤트가 생성된다.
  3. UIKit 프레임워크를 통해 생성된 port로 해당 이벤트가 앱으로 전달된다.
  4. 이벤트는 앱 내부적으로 Queue의 형태로 정리되고, Main Run Loop에 하나씩 매핑된다.
  5. UIApplication 객체는 이때 가장 먼저 이벤트를 받는 객체로 어떤 것이 실행되야 하는지 결정한다

출처 및 참고

profile
iOS시작~

0개의 댓글