В чем преимущества расписания RAC по сравнению с немедленным ответом подписчику?

Не могли бы вы пояснить, почему RACErrorSignal выполняет sendError через подпискуScheduler, как показано ниже, но не сразу вызывает sendError подписчику?

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

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

person Nikita Leonov    schedule 17.12.2014    source источник


Ответы (1)


Подписка всегда происходит по планировщику. Если подписка происходит в потоке с планировщиком, таком как основной поток, то этот блок выполняется немедленно. Если это не немедленно, это означает, что подписка инициируется из потока, у которого нет связанного планировщика.

Чтобы обеспечить согласованное поведение методов +createSignal: и -subscribe:, каждая подписка RACSignal гарантированно выполняется на действительном RACScheduler.

Если поток подписчика уже имеет +currentScheduler, планирование выполняется немедленно; в противном случае планирование выполняется как можно скорее в фоновом планировщике. Обратите внимание, что основной поток всегда связан с +mainThreadScheduler, поэтому подписка всегда будет там немедленной.

Из: ReactiveCocoa Рекомендации по дизайну

person Dave Lee    schedule 17.12.2014