앱 생명주기(2)

메인 실행 루프

앱의 메인 실행 루프는 유저와 관련된 모든 이벤트를 처리한다. UIApplication 객체는 실행 시점에 실행 루프를 준비하고 뷰 기반 인터페이스를 관리하고 이벤트를 처리한다.

메인 실행 루프라는 이름에서 알 수 있듯 메인 스레드에서 작동되며, 유저와 관련된 이벤트를 순차적으로 처리한다. 아래의 그림은 메인 실행 루프의 구조와 어떻게 작동하는지를 나타낸다. 유저와 기기간의 상호작용을 통해 이와 관련된 이벤트를 만들고, 이 이벤트는 UIKit에 설정된 특수한 포트를 통해 앱에 전달된다. 이 이벤트는 앱에 의해 하나씩 내부의 대기열에 넣어지고 메인 실행 루프에 하나씩 전달된다. UIApplication 객체는 이 이벤트를 수신하여 어떤 작업을 할지를 결정하게 된다.

이벤트의 유형들

iOS 앱은 다양한 형태의 이벤트를 전달받는다. 대부분은 메인 실행 루프를 사용하여 전달되지만, 일부 특수한 이벤트는 델리게이트나 개발자가 제공한 블록으로 전달된다. 보편적인 이벤트는 다음과 같다.

  • Touch -> 뷰는 터치에 대한 응답 객체이다. 뷰에 의해 처리되지 않은 모든 터치는 처리를 위해 응답 체인에 전달된다.
  • Remote control & Shake motion -> 원격 제어는 미디 재생을 위한 것으로, 헤드폰 및 기타 액세서리로부터 생성된다.
  • Accelerometer, Magnetometer, Gyroscope -> 가속도계, 자력계, 자이로스코프와 관련된 이벤트는 사용자가 지정한 객체로 전달된다.
  • Location -> Core Location 프레임워크를 통해 유저의 위치를 받아올 수 있다.
  • Redraw -> Redraw는 그 자체가 이벤트는 아니지만 뷰가 스스로 뷰를 그리기 위해 호출한다.

이벤트 처리에 대해서

Touch나 Remote control과 같은 몇 몇 이벤트는 앱의 응답 객체에 의해 처리된다. 그리고 이 응답 객체는 앱의 모든 곳에 있다. UIApplication, 뷰, 뷰 컨트롤러는 모두 응답 객체에 해당한다. 대부분의 이벤트는 특정 응답 객체를 대상으로 하지만, 이벤트를 직접 처리하지 않는 뷰는 응답 체인을 통해 이 이벤트를 처리하기 위해 슈퍼 뷰나 뷰 컨트롤러에게 전달하기도 한다. 버튼에서 발생하는 터치의 경우, 일반적인 뷰 터치와는 다르게 처리된다. 이 이벤트는 적절한 메시지로 패키징되어 해당 버튼 터치에 맞춘 코드를 실행할 수 있도록 한다.