ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Run Loop
    iOS 2021. 6. 1. 19:17

    안녕하십니까. 그린입니다🟢

    이번 포스팅에서는 Run Loop(런루프)에 대해 학습해보겠습니다🧑🏻‍💻

     

    런루프.. 어디서 많이 보고 런루프의 이벤트 처리 그림도 봤었는데 막상 생각해보니 제대로 이해하고 있지 않더라구요.

    그래서 이번 기회에 한번 파해쳐보겠습니다!

    Run Loop

     : 작업 스케쥴링과 전달된 이벤트를 처리하는 이벤트 처리 루프

     : 런루프는 유저가 이벤트를 일으키고 그 이벤트들을 처리하는 프로세스

     : 대표적으로 UIApplication이 메인 런루프를 뷰의 이벤트 및 업데이트를 처리해줄 때 활용

     : 메인 런루프는 뷰와 관련 있기때문에 뷰하면 어디다..!? 메인 스레드에서 동작

     : 런루프의 목적은 스레드에 작업이 있으면 하게하고 없으면 쉬도록 하는것에서 나옴

     

    아래는 메인 스레드의 런루프 과정

     동작을 살펴보면,

     -. 유저 이벤트 발생 (더치, 줌)

     -. 이벤트 생성 (시스템 영역)

     -. UIKit 프레임워크를 통해 Port로 이벤트 앱 전달

     -. 큐의 모양으로 메인 런루프에 순차적으로 FIFO 방식으로 하나씩 전달

     -. UIApplication 객체에서 어떤 동작이 실행되는지 결정

    Run Loop (2)

     - 앱의 각 스레드 객체에는 자동으로 생성된 런루프 객체가 존재

     - 런루프 접근 시 current 메서드로 접근

    Run Loop 구조

     -. Input source: 핸들러에 비동기 이벤트 전달하고 runUntilDate 메서드가 종료

     -. Timer source:  핸들러에 이벤트 전달하지만 런 루프를 종료하진 않음

     -. 런루프는 동작에 대해 노티피케이션을 생성

     -. 등록된 런루프 옵저버를 통해 알림을 수신하고 추가 처리를 위해 스레드에 구현하는것이 가능

    Run Loop 사용

     -. 앱에 대해 메인 외 다른 스레드를 생성할 때 런루프 명시를 해야함 (메인 스레드는 자동으로 런루프를 실행)

     -. 스레드에서 타이머를 사용하는경우

     -. Port / Custom input source로 타 스레드와 통신하는 경우 

    [정리 및 느낀점]

    런루프가 지금 확실히 간단하게 정리되지는 않지만 정리해보자면 이렇다.

    스레드와 함께 생성되는 런루프는 이벤트들에 대한 핸들링을 처리하는 추상화라고 볼 수 있다.

    런루프에서 이벤트가 발생하면 이벤트 핸들링을 해주고 끝나면 대기 상태로 기다리는것이다.

    그리고 다음 이벤트에 대해 모니터링을 해준다.

    주의할 것은 런루프는 또한 완전하게 스레드 세이프 하지 않음으로 런루프 실행 중 다른 스레드를 호출하면 안된다.

    [참고자료]

    https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html

    'iOS' 카테고리의 다른 글

    Test Doubles - fake, stub, mock  (0) 2021.07.22
    ReactorKit으로 랜덤 통신 구현하기  (0) 2021.07.10
    CI / CD  (0) 2021.04.29
    Machine Learning  (0) 2021.04.20
    Core Animation  (0) 2021.04.01
Designed by Tistory.