ariedaze
사과농장
ariedaze
전체 방문자
오늘
어제
  • 분류 전체보기 (18)
    • IOS (6)
    • Swift (5)
    • WWDC (2)
    • Combine (4)
    • 치타핏 개발일기 (1)
    • FOREST (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 사과농장에 오신걸 환영합니다🥳

인기 글

태그

  • 앱개발
  • 치타핏
  • WWDC
  • 개발
  • cheetahfit
  • iOS앱
  • WWDC21
  • swift
  • swft
  • Apple
  • iOS앱개발
  • ios
  • 새싹
  • combine
  • await
  • async
  • Swfit

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ariedaze

사과농장

Combine | Scheduler
Combine

Combine | Scheduler

2022. 6. 10. 16:58


Scheduler는 언제(시간), 어떻게(스레드) Publisher의 작업들이 수행될지를 결정하기 위한 프토토콜입니다.

 

Apple에서 언제, 어떻게...를 위한 api에는 DispatchQueue, OperationQueue, RunLoop등이 있는데요!

그리고 Scheduler는 프로토콜이라고 했는데요.

 

iOS13부터 DispatchQueue, OperationQueue, RunLoop에서 Scheduler를 채택하고 있기 때문에

이를 그대로 Combine에서도 사용할 수 있습니다@_@

 

기존에 DispatchQueue를 사용할 때 Closure를 중첩된 형태로 써서

여러 스레드를 전환하면 가독성이 안좋을 수 밖에 없었지만

Combine은 선언형으로 사용하기 때문에 가독성 좋게 사용할 수 있다는 장점도 있겠죠?

 

 

Combine에서 이 스케줄러를 변경해주는 방법이 두가지가 있는데요

1. `receive(on:)` : downstream의 컨텍스트를 변경

2. `subscribe(on:)` : upstream의 실행 컨텍스트를 변경

 

이렇게 두가지가 있습니다.

 

 

Scheduler는 element가 생성된 스레드와 동일한 스레드를 사용합니다.

 

위의 메서드를 사용하면 생성된 스레드 외에도 스레드를 바꿀 수가 있는거지용!.!

 
let ioPerformingPublisher == // Some publisher.
let uiUpdatingSubscriber == // Some subscriber that updates the UI.

ioPerformingPublisher
    .subscribe(on: backgroundQueue)
    .receive(on: RunLoop.main)
    .subscribe(uiUpdatingSubscriber)
 
이 코드는 PerformingPublisher가 백그라운드에서 요청을 받고, 
element를 받고 완료에 대한 처리는 RunLoop.main에서 동작하게 됩니다.
 
 

 

Scheduler를 사용해서 비동기 처리를 적절한 스레드에서, 적절한 타이밍에서 동작하도록 조절할 수 있겠죠?!

 

 

 

 

 

이외에 강제로 동기적으로 수행하도록 만드는 ImmediateScheduler가 있습니다. 해당 스케쥴러에는 시간 옵션을 주어도 이를 무시하고 즉시 실행하는 특징을 가지고 있습니다.

 

 

 

 

https://developer.apple.com/documentation/combine/scheduler

 

Apple Developer Documentation

 

developer.apple.com

https://developer.apple.com/documentation/combine/fail/receive(on:options:) 

 

Apple Developer Documentation

 

developer.apple.com

https://developer.apple.com/documentation/combine/fail/subscribe(on:options:) 

 

Apple Developer Documentation

 

developer.apple.com

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Combine' 카테고리의 다른 글

Combine | Operator  (0) 2022.06.02
Combine | Publisher and Subscriber  (0) 2022.05.24
Combine | Overview  (0) 2022.05.09
    'Combine' 카테고리의 다른 글
    • Combine | Operator
    • Combine | Publisher and Subscriber
    • Combine | Overview
    ariedaze
    ariedaze

    티스토리툴바