[Swift] Run loop

jae·2024년 12월 25일

swift

목록 보기
14/14

자식 뷰의 레이아웃을 조절하고 업데이트할때 변환하는 layoutSubviews를 공부하며 직접 layoutSubviews를 직접 호출을 하면안되고 애플이 만들어놓은 별도 setNeedsLayout() 함수를 통해야한다고 한다
그 이유는 바로 run loop인데 그럼 그 Runloop는 뭘까

run loop란?

앱이 실행시 우리눈에는 보이지 않지만 Runloop라는 것이 같이 앱을 계속 loop하는 매커니즘이다

개념

  1. 이벤트 루프의 하나로 이벤트가 생겼는지 확인하고 그 이벤트를 처리한다
  2. os의 thread는 하나씩 runloop를 가지게 된다
  3. main thread에서 runloop가 제공되어 ui관리와 이벤트입력부터 출력까지 담당해준다
  4. 비동기 작업을 처리한다
  5. cpu작업을 효율적으로 관리한다 등

동작 원리

  1. 대기 waiting : 사용자 이벤트나 네트워크 응답을 대기한다
  2. 처리 processing : 수신한 이벤트에 대한 처리를 실행한다
  3. 대기 상태로 전환 running : 처리 이후 다시 대기로 전환한다
  4. 종료 exit : 종료 요청을 확인하면 루프를 종료한다

구조

입력 소스 input sources

  • CFRunLoopSource
  • 사용자의 입력과같은 동기 이벤트를 처리한다

타이머 소스 timer sources

  • NSTimer, CADisplayLink
  • 비동기 이벤트를 처리한다

Observer

  • CFRunLoopObserver
  • 런루프의 상태를 감지해서 이벤트를 처리한다

활용 예시

  1. 타이머 이벤트 유지 : 다른 이벤트가 발생해도 타이머는 유지됨
  2. 네트워크 요청 처리 : 비동기 이벤트 큐를 관리
  3. 백그라운드 작업 처리 : 별도의 스레드에 런 루프 추가하여 작업 실행
  4. UI 애니메이션 제어
  5. 백그라운드 작업 등

0개의 댓글