메인 실행 루프

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

이벤트의 유형들

  • iOS 앱은 다양한 형태의 이벤트를 전달받는다.
  • 대부분은 메인 실행 루프를 사용하여 전달되지만, 일부 특수한 이벤트는 델리게이트나 개발자가 제공한 블록으로 전달된다.
  • 보편적인 이벤트는 다음과 같다.
  • Touch -> 뷰는 터치에 대한 응답 객체이다. 뷰에 의해 처리되지 않은 모든 터치는 처리를 위해 응답 체인에 전달된다.
  • Remote control & Shake motion -> 원격 제어는 미디 재생을 위한 것으로, 헤드폰 및 기타 액세서리로부터 생성된다.
  • Accelerometer, Magnetometer, Gyroscope -> 가속도계, 자력계, 자이로스코프와 관련된 이벤트는 사용자가 지정한 객체로 전달된다.
  • Location -> Core Location 프레임워크를 통해 유저의 위치를 받아올 수 있다.
  • Redraw -> Redraw는 그 자체가 이벤트는 아니지만 뷰가 스스로 뷰를 그리기 위해 호출한다.

이벤트 처리에 대해서

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