12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /*
- * This file is part of the SDWebImage package.
- * (c) Olivier Poitrey <rs@dailymotion.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- #import "SDAsyncBlockOperation.h"
- @interface SDAsyncBlockOperation ()
- @property (assign, nonatomic, getter = isExecuting) BOOL executing;
- @property (assign, nonatomic, getter = isFinished) BOOL finished;
- @property (nonatomic, copy, nonnull) SDAsyncBlock executionBlock;
- @end
- @implementation SDAsyncBlockOperation
- @synthesize executing = _executing;
- @synthesize finished = _finished;
- - (nonnull instancetype)initWithBlock:(nonnull SDAsyncBlock)block {
- self = [super init];
- if (self) {
- self.executionBlock = block;
- }
- return self;
- }
- + (nonnull instancetype)blockOperationWithBlock:(nonnull SDAsyncBlock)block {
- SDAsyncBlockOperation *operation = [[SDAsyncBlockOperation alloc] initWithBlock:block];
- return operation;
- }
- - (void)start {
- if (self.isCancelled) {
- return;
- }
-
- [self willChangeValueForKey:@"isExecuting"];
- self.executing = YES;
- [self didChangeValueForKey:@"isExecuting"];
-
- if (self.executionBlock) {
- self.executionBlock(self);
- } else {
- [self complete];
- }
- }
- - (void)cancel {
- [super cancel];
- [self complete];
- }
- - (void)complete {
- [self willChangeValueForKey:@"isExecuting"];
- [self willChangeValueForKey:@"isFinished"];
- self.executing = NO;
- self.finished = YES;
- [self didChangeValueForKey:@"isExecuting"];
- [self didChangeValueForKey:@"isFinished"];
- }
- @end
|