2014-12-17 1 views
1

아래와 같이 subscriptionScheduler를 통해 RACErrorSignal이 sendError를하는 이유를 명확히 알 수 있습니까? 그러나 subscriber에게 sendError를 즉시 호출하지는 마십시오.구독자에게 즉시 응답하는 RAC 일정의 이점은 무엇입니까?

- (RACDisposable *)subscribe:(id<RACSubscriber>)subscriber { 
NSCParameterAssert(subscriber != nil); 

return [RACScheduler.subscriptionScheduler schedule:^{ 
    [subscriber sendError:self.error]; 
}]; 
} 

답변

2

구독은 항상 스케줄러에서 발생합니다. 구독이 주 스레드와 같은 스케줄러가있는 스레드에서 발생하면 해당 블록이 즉시 실행됩니다. 즉각적인 것이 아니라면 연관된 스케줄러가없는 스레드에서 구독이 트리거되고 있음을 의미합니다.

+createSignal:-subscribe: 방법에 대한 일관된 동작을 보장하기 위해, 각 RACSignal 가입 유효한 RACScheduler에서 발생하는 보장됩니다.

가입자의 스레드가 이미 인 경우 예약이 즉시 수행됩니다. 그렇지 않으면 백그라운드 스케줄러에서 가능한 한 빨리 스케줄링이 발생합니다. 주 스레드는 항상 +mainThreadScheduler과 연결되어 있으므로 구독은 항상 즉시 처리됩니다.

보낸 사람 : ReactiveCocoa Design Guidelines

관련 문제