创建异步的NSOperation

来源:互联网 发布:windows安装ipython3 编辑:程序博客网 时间:2024/06/06 19:42
#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"];}

0 0
原创粉丝点击