RACSubscriptionScheduler.m 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. //
  2. // RACSubscriptionScheduler.m
  3. // ReactiveObjC
  4. //
  5. // Created by Josh Abernathy on 11/30/12.
  6. // Copyright (c) 2012 GitHub, Inc. All rights reserved.
  7. //
  8. #import "RACSubscriptionScheduler.h"
  9. #import "RACScheduler+Private.h"
  10. @interface RACSubscriptionScheduler ()
  11. // A private background scheduler on which to subscribe if the +currentScheduler
  12. // is unknown.
  13. @property (nonatomic, strong, readonly) RACScheduler *backgroundScheduler;
  14. @end
  15. @implementation RACSubscriptionScheduler
  16. #pragma mark Lifecycle
  17. - (instancetype)init {
  18. self = [super initWithName:@"org.reactivecocoa.ReactiveObjC.RACScheduler.subscriptionScheduler"];
  19. _backgroundScheduler = [RACScheduler scheduler];
  20. return self;
  21. }
  22. #pragma mark RACScheduler
  23. - (RACDisposable *)schedule:(void (^)(void))block {
  24. NSCParameterAssert(block != NULL);
  25. if (RACScheduler.currentScheduler == nil) return [self.backgroundScheduler schedule:block];
  26. block();
  27. return nil;
  28. }
  29. - (RACDisposable *)after:(NSDate *)date schedule:(void (^)(void))block {
  30. RACScheduler *scheduler = RACScheduler.currentScheduler ?: self.backgroundScheduler;
  31. return [scheduler after:date schedule:block];
  32. }
  33. - (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void (^)(void))block {
  34. RACScheduler *scheduler = RACScheduler.currentScheduler ?: self.backgroundScheduler;
  35. return [scheduler after:date repeatingEvery:interval withLeeway:leeway schedule:block];
  36. }
  37. @end