RACScheduler Class Reference
Inherits from | NSObject |
Declared in | RACScheduler.h RACScheduler.m |
Overview
Schedulers are used to control when and where work is performed. A private interface for internal RAC use only.
Tasks
Other Methods
-
+ immediateScheduler
-
+ mainThreadScheduler
-
+ schedulerWithPriority:name:
-
+ schedulerWithPriority:
-
+ scheduler
-
+ currentScheduler
-
– schedule:
-
– after:schedule:
-
– afterDelay:schedule:
-
– after:repeatingEvery:withLeeway:schedule:
-
– scheduleRecursiveBlock:
Other Methods
Class Methods
currentScheduler
The current scheduler. This will only be valid when used from within a [RACScheduler schedule:] block or when on the main thread.
+ (RACScheduler *)currentScheduler
Declared In
RACScheduler.h
immediateScheduler
A singleton scheduler that immediately executes the blocks it is given.
+ (RACScheduler *)immediateScheduler
Discussion
Note: Unlike most other schedulers, this does not set the current scheduler. There may still be a valid currentScheduler if this is used within a block scheduled on a different scheduler.
Declared In
RACScheduler.h
mainThreadScheduler
A singleton scheduler that executes blocks in the main thread.
+ (RACScheduler *)mainThreadScheduler
Declared In
RACScheduler.h
scheduler
Invokes schedulerWithPriority: with RACSchedulerPriorityDefault.
+ (RACScheduler *)scheduler
Declared In
RACScheduler.h
schedulerWithPriority:
Invokes schedulerWithPriority:name: with a default name.
+ (RACScheduler *)schedulerWithPriority:(RACSchedulerPriority)priority
Declared In
RACScheduler.h
schedulerWithPriority:name:
Creates and returns a new background scheduler with the given priority and name. The name is for debug and instrumentation purposes only.
+ (RACScheduler *)schedulerWithPriority:(RACSchedulerPriority)priority name:(NSString *)name
Discussion
Scheduler creation is cheap. It’s unnecessary to save the result of this method call unless you want to serialize some actions on the same background scheduler.
Declared In
RACScheduler.h
subscriptionScheduler
A dedicated scheduler that fills two requirements:
+ (instancetype)subscriptionScheduler
Discussion
- . By the time subscription happens, we need a valid currentScheduler.
- . Subscription should happen as soon as possible.
To fulfill those two, if we already have a valid currentScheduler, it immediately executes scheduled blocks. If we don’t, it will execute scheduled blocks with a private background scheduler.
Declared In
RACScheduler+Private.h
Instance Methods
after:repeatingEvery:withLeeway:schedule:
Reschedule the given block at a particular interval, starting at a specific time, and with a given leeway for deferral.
- (RACDisposable *)after:(NSDate *)date repeatingEvery:(NSTimeInterval)interval withLeeway:(NSTimeInterval)leeway schedule:(void ( ^ ) ( void ))block
Discussion
Note that blocks scheduled for a certain time will not preempt any other scheduled work that is executing at the time.
Regardless of the value of leeway
, the given block may not execute exactly
at when
or exactly on successive intervals, whether due to system load or
because another block is currently being run on the scheduler.
It is considered undefined behavior to invoke this method on the immediateScheduler.
date - The earliest time at which block
should begin executing. The
block may not execute immediately at this time, whether due to
system load or another block on the scheduler currently being
run. Cannot be nil.
interval - The interval at which the block should be rescheduled, starting
from date
. This will use the system wall clock, to avoid
skew when the computer goes to sleep.
leeway - A hint to the system indicating the number of seconds that each
scheduling can be deferred. Note that this is just a hint, and
there may be some additional latency no matter what.
block - The block to repeatedly schedule for execution. Cannot be nil.
Returns a disposable which can be used to cancel the automatic scheduling and rescheduling, or nil if cancellation is not supported.
Declared In
RACScheduler.h
after:schedule:
Schedule the given block for execution on the scheduler at or after a specific time.
- (RACDisposable *)after:(NSDate *)date schedule:(void ( ^ ) ( void ))block
Discussion
Note that blocks scheduled for a certain time will not preempt any other scheduled work that is executing at the time.
When invoked on the immediateScheduler, the calling thread will block until the specified time.
date - The earliest time at which block
should begin executing. The block
may not execute immediately at this time, whether due to system load
or another block on the scheduler currently being run. Cannot be nil.
block - The block to schedule for execution. Cannot be nil.
Returns a disposable which can be used to cancel the scheduled block before it begins executing, or nil if cancellation is not supported.
Declared In
RACScheduler.h
afterDelay:schedule:
Schedule the given block for execution on the scheduler after the delay.
- (RACDisposable *)afterDelay:(NSTimeInterval)delay schedule:(void ( ^ ) ( void ))block
Discussion
Converts the delay into an NSDate, then invokes after:schedule:
.
Declared In
RACScheduler.h
initWithName:
Initializes the receiver with the given name.
- (id)initWithName:(NSString *)name
Discussion
name - The name of the scheduler. If nil, a default name will be used.
Returns the initialized object.
Declared In
RACScheduler+Private.h
schedule:
Schedule the given block for execution on the scheduler.
- (RACDisposable *)schedule:(void ( ^ ) ( void ))block
Discussion
Scheduled blocks will be executed in the order in which they were scheduled.
block - The block to schedule for execution. Cannot be nil.
Returns a disposable which can be used to cancel the scheduled block before it begins executing, or nil if cancellation is not supported.
Declared In
RACScheduler.h
scheduleRecursiveBlock:
Schedule the given recursive block for execution on the scheduler. The scheduler will automatically flatten any recursive scheduling into iteration instead, so this can be used without issue for blocks that may keep invoking themselves forever.
- (RACDisposable *)scheduleRecursiveBlock:(RACSchedulerRecursiveBlock)recursiveBlock
Discussion
Scheduled blocks will be executed in the order in which they were scheduled.
recursiveBlock - The block to schedule for execution. When invoked, the
recursive block will be passed a void (^)(void)
block
which will reschedule the recursive block at the end of the
receiver’s queue. This passed-in block will automatically
skip scheduling if the scheduling of the recursiveBlock
was disposed in the meantime.
Returns a disposable which can be used to cancel the scheduled block before it begins executing, or to stop it from rescheduling if it’s already begun execution.
Declared In
RACScheduler.h