Skip to content

Instantly share code, notes, and snippets.

@tailang
Created June 25, 2016 08:19
Show Gist options
  • Save tailang/1a10390ce23b6943ac15cef87f08043f to your computer and use it in GitHub Desktop.
Save tailang/1a10390ce23b6943ac15cef87f08043f to your computer and use it in GitHub Desktop.

NSOptation 是一个抽象类,主要使用NSOpration的两个子类NSBlockOperation, NSInvocationOperation

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{
         NSLog(@"block 1 start");
        
        sleep(3);
        
        NSLog(@"block 1 end");
        //执行的操作1
    }];
    
    NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"block 2 start");
        
        sleep(2);
        
        NSLog(@"block 2 end");
        //执行的操作1
    }];

    
    NSBlockOperation *operation3 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"block 3 start");
        
        sleep(1);
        
        NSLog(@"block 3 end");
        //执行的操作1
    }];
    
    //如果queue是main queue, 那么不管maxConcurrentOperationCount是多少,永远是串行的
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    
    queue.maxConcurrentOperationCount = 2;
    
    [queue addOperations:@[operation1, operation2, operation3] waitUntilFinished:NO];

    
    //不使用队列默认是并发的
//    NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{
//        NSLog(@"block 1 start");
//        
//        sleep(3);
//        
//        NSLog(@"block 1 end");
//        //执行的操作1
//    }];
    
//    [operation addExecutionBlock:^{
//        NSLog(@"block 2 start");
//        
//        sleep(2);
//        
//        NSLog(@"block 2 end");
//    }];
//    [operation addExecutionBlock:^{
//        NSLog(@"block 3 start");
//        
//        sleep(1);
//        
//        NSLog(@"block 3 end");
//    }];
    
    //[operation start];
    
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment