본문 바로가기

프로그래밍/iOS

Run Loop

  1. Run Loop
    - 이벤트 처리를 위한 loop로 입력소스와 타이머소스를 주로 처리.
       1) 입력소스(input source): 다른 thread나 어플리케이션에서 전달되는 메시지 이벤트(비동기식)
       2) 타이머소스(timer source): 예정시간이나 반복수행간격에 따라 발생하는 이벤트(동기식)

    - 앱을 계속 살려두기 위함
    - 할 일이 많을 때는 thread를 바쁘게, 할 일이 없을 때는 쉬게 하는 것을 목적으로 함
    - Main thread에서 생성된 Main run loop 이외의 경우 사용자가 직접 추가해야 함
    - 지속적 장호작용이 필요한 경우 반드시 사용(ex: 통신, 타이머)
    - 사용자 이벤트(user interaction)발생 및 처리과정
       1) 이벤트 발생(터치, 키보드 등)
       2) 시스템에서 port를 통해 앱으로 전달

       3) 
    이벤트 큐에 등록
       4) 이벤트에 맞는 메소드 실행


    <그림1. 사용자 이벤트(user interaction) 발생 및 처리과정>
    https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html



  2. - 전달받은 이벤트를 앱의 run loop에서 처리하는 과정
      1) run loop 대기 중 이벤트 발생(주로 입력소스와 타이머소스 처리) 2) 정해진 메소드 호출(타이머에서 설정한 시간데 따라) 3) 메소드 완료 후 변경될 필요가 있는 사항 적용(뷰의 경우 setNeedsLayout, setNeedsDisplay) 4) runUntil- 메소드에서 정한 시간까지 유지, 할일 없으면 suspend 상태.

    <그림2. 전달받은 이벤트를 앱의 run loop에서 처리하는 과정> (https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html)