创建异步的NSOperation

Posted techfu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建异步的NSOperation相关的知识,希望对你有一定的参考价值。

#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"];

以上是关于创建异步的NSOperation的主要内容,如果未能解决你的问题,请参考以下文章

iOS中用GCD和NSOperation多个异步操作的关联

GCD的同步异步串行并行NSOperation和NSOperationQueue一级用dispatch_once实现单例

NSOperationQueue

iOS开发-91GCD的同步异步串行并行NSOperation和NSOperationQueue一级用dispatch_once实现单例(转载)

NSOperation创建队列

iOS多线程——GCD与NSOperation总结