Skip to content
outsideris edited this page Aug 26, 2011 · 1 revision

원문

Main event loop

메인 이벤트 루프에서 애플리케이션은 들어오는 이벤트들을 객체가 처리할 수 있도록 계속해서 라우팅하고 처리결과로 UI와 상태를 업데이트 한다. 이벤트 루프는 간단하게 런루프(run loop)이다: 스케쥴링된 일과 이벤트-프로세싱 루프와 여러가지 인풋소스에서 발생한 이벤트의 좌표들은 런루프에 추가된다. 모든 쓰레드는 런루프에 접근한다. 하지만 모든 메인쓰레드에서 런루프는 반드시 설정되고 코드에서 수동적으로 실행되어야 한다. 코코아 애플리케이션에서 메인쓰레드를 위한 런루프(메인 이벤트 루프)는 애플리케이션 객체에 의해서 자동적으로 실행된다. 메인 이벤트 루프를 구별해 주는 것은 주 인풋소스가 사용자액션으로 인한 이벤트를 OS로부터 받는다는 것이다. 예를 들어 화면을 탭하거나 키보드를 사용해서 글자를 입력하는 것이다.

run loop

The Application Object Gets and Dispatches Events

애플리케이션이 시작된 직후 메인 이벤트 루프를 위한 기반을 설정한다. 로우레벨 유저 이벤트를 전달할 책임이 있는 의존 시스템 컴포넌트와 연결을 한다. 애플리케이션은 이러한 이벤트를 메인 쓰레드에 런루프에 설치된 인풋소스를 통해서 받는다. 애플리케이션은 각 이벤트를 도착하는 순서대로 별도로 처리해야 하기 때문에 이러한 로우레벨 이벤트는 FIFO 이벤트 큐에 들어간다.

최초 유저 인터페이스가 화면에 나타나면 애플리케이션은 외부 이벤트에 의해서 주도된다. 애플리케이션 객체는 이벤트 큐의 최상위에 있는 객체를 취해서 이벤트 객체로 변환하고(iOS에서는 UIEvent이고 Mac OSX에서는 NSEvent이다) 처리하기 위해서 애플리케이션의 다른 객체로 디스패치한다. 디스패치된 이벤트가 돌아왔을 때 애플리케이션은 큐에서 다음 객체를 가져와서 디스패치한다. 애플리케이션이 종료될때 까지 이것을 계속 한다.

Core Objects Respond to Events and Draw the User Interface

또한 애플이케이션이 실행되었을 때 UI를 그리고 이벤트를 처리하는 책임을 가진 객체들의 코어그룹을 설정한다. 이러한 코어 객체들은 winodws와 여러 종류의 view를 포함한다. 애플리케이션 객체가 이벤트 큐에서 이벤트를 얻었을 때 유저 이벤트가 일어난 윈도우에 그것을 디스패치한다. 윈도우는 이벤트를 처리하기에 가장 적절한 핸들러인 뷰에 보낸다:

  • 멀티터치와 마우스이벤트에서 뷰는 터치나 마우스 포인터 아래 있다.
  • 키보드, 모션, 그외 이벤트에서는 뷰는 최우선 응답자이다.

이 최초의 뷰가 이벤트를 처리하지 않는다면 그것은 응답자 체인(responder chain)을 통해서 애플리케이션의 다른 뷰로 전달될 수 있다.

이벤트를 처리에서 뷰는 종종 애플리케이션의 외관을 수정하고 상태나 데이터를 업데이트 하는 일련의 액션들을 초기화한다. 이러한 액션이 완료되면 애플리케이션으로 제어가 돌려져서 이벤트큐로부터 다음 이벤트를 취한다.

그외 참고 문서