#import "ConcurrentOperation.h"
@interface ConcurrentOperation(){
BOOL executing;
BOOL finished;
}
@property (nonatomic, copy)NSString *cusName;
@end
@implementation ConcurrentOperation
- (id)init {
self = [super init];
if (self) {
executing = NO;
finished = NO;
}
return self;
}
- (instancetype)initWithName:(NSString *)name {
self = [super init];
if (self) {
executing = NO;
finished = NO;
_cusName = name;
}
return self;
}
//- (BOOL)isConcurrent {
// return YES;
//}
- (BOOL)isAsynchronous {
return YES;
}
- (BOOL)isExecuting {
return executing;
}
- (BOOL)isFinished {
return finished;
}
- (void)start {
// Always check for cancellation before launching the task.
NSLog(@"%@----start-----------------", _cusName);
if ([self isCancelled])
{
// Must move the operation to the finished state if it is canceled.
[self willChangeValueForKey:@"isFinished"];
finished = YES;
[self didChangeValueForKey:@"isFinished"];
return;
}
// If the operation is not canceled, begin executing the task.
[self willChangeValueForKey:@"isExecuting"];
[NSThread detachNewThreadSelector:@selector(main) toTarget:self withObject:nil];
executing = YES;
[self didChangeValueForKey:@"isExecuting"];
}
- (void)main {
@try {
// Do the main work of the operation here.
NSInteger i = 1000;
while (i--) {
NSLog(@"%@----main---", _cusName);
}
[self completeOperation];
}
@catch(...) {
// Do not rethrow exceptions.
}
}
- (void)completeOperation {
[self willChangeValueForKey:@"isFinished"];
[self willChangeValueForKey:@"isExecuting"];
executing = NO;
finished = YES;
[self didChangeValueForKey:@"isExecuting"];
[self didChangeValueForKey:@"isFinished"];
}