NSOperationQueue的基本使用

Posted on 2016-07-17 16:26  柠檬片  阅读(367)  评论(0)    收藏  举报
  • NSOperationQueue的作用
    NSOperation可以调用start方法来执行任务,但默认是同步执行的
    如果将NSOperation添加到NSOperationQueue(操作队列)中,系统会自动异步执行NSOperation中的操作
  
    添加操作到NSOperationQueue中

    - (void)addOperation:(NSOperation *)op;

    - (void)addOperationWithBlock:(void (^)(void))block;

  1 -(void)blockOperation
  2 {
  3     //1.创建队列
  4     /*
  5      并发:全局并发队列,自己创建(concurrent)
  6      串行:主队列,自己创建(serial)
  7      */
  8     
  9     //    NSOperationQueue
 10     /*
 11      主队列:凡是放到主队列里面的任务都在主线程执行[NSOperationQueue mainQueue]
 12      非主队列:alloc int,同时具备了并发和串行的功能,默认是并发队列
 13      */
 14     
 15     NSOperationQueue *queue = [[NSOperationQueue alloc]init];
 16     
 17     //2.封装操作
 18     NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
 19         NSLog(@"1----%@",[NSThread currentThread]);
 20     }];
 21     
 22     NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
 23         NSLog(@"2----%@",[NSThread currentThread]);
 24     }];
 25     
 26     NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
 27         NSLog(@"3----%@",[NSThread currentThread]);
 28     }];
 29     
 30     [op3 addExecutionBlock:^{
 31         NSLog(@"4----%@",[NSThread currentThread]);
 32     }];
 33     
 34     [op3 addExecutionBlock:^{
 35         NSLog(@"5----%@",[NSThread currentThread]);
 36     }];
 37     
 38     
 39     [op3 addExecutionBlock:^{
 40         NSLog(@"6----%@",[NSThread currentThread]);
 41     }];
 42     
 43     
 44     //3.添加操作到队列
 45     [queue addOperation:op1];   //[op1 start]
 46     [queue addOperation:op2];
 47     [queue addOperation:op3];
 48     
 49     //简便方法
 50     [queue addOperationWithBlock:^{
 51          NSLog(@"7----%@",[NSThread currentThread]);
 52     }];
 53     
 54     [queue addOperationWithBlock:^{
 55         NSLog(@"8----%@",[NSThread currentThread]);
 56     }];
 57 
 58 }
 59 -(void)invocation
 60 {
 61     //1.创建队列
 62     /*
 63      并发:全局并发队列,自己创建(concurrent)
 64      串行:主队列,自己创建(serial)
 65      */
 66     
 67     //    NSOperationQueue
 68     /*
 69      主队列:凡是放到主队列里面的任务都在主线程执行[NSOperationQueue mainQueue]
 70      非主队列:alloc int,同时具备了并发和串行的功能,默认是并发队列
 71      */
 72     
 73     NSOperationQueue *queue = [[NSOperationQueue alloc]init];
 74     
 75     //2.封装操作
 76     NSInvocationOperation *op1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download1) object:nil];
 77     
 78     NSInvocationOperation *op2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download2) object:nil];
 79     
 80     NSInvocationOperation *op3 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download3) object:nil];
 81     
 82     //3.添加操作到队列
 83     [queue addOperation:op1];   //[op1 start]
 84     [queue addOperation:op2];
 85     [queue addOperation:op3];
 86 }
 87 
 88 -(void)download1
 89 {
 90     NSLog(@"download1---%@",[NSThread currentThread]);
 91 }
 92 
 93 -(void)download2
 94 {
 95     NSLog(@"download2---%@",[NSThread currentThread]);
 96 }
 97 
 98 -(void)download3
 99 {
100     NSLog(@"download3---%@",[NSThread currentThread]);
101 }
示例

  把继承自NSOperation的类添加到Queue中:

-(void)custom
{
    //1.创建队列
    
    NSOperationQueue *queue = [[NSOperationQueue alloc]init];
    
    //2.封装操作
    YSOperation *op1 = [[YSOperation alloc]init];
    YSOperation *op2 = [[YSOperation alloc]init];
    
    //3.添加操作到队列
    [queue addOperation:op1];   //[op1 start]
    [queue addOperation:op2];
}
示例