多线程NSOperation的使用

  //创建队列

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    

    queue.suspended = YES;//这个suspended属性表示线程挂起 就是暂停了 设置成no表示继续执行

    [queue cancelAllOperations];//取消线程

    //设置最大并发操作数

    queue.maxConcurrentOperationCount = 3;//表示最大同时执行3条线程 不写默认无限制 如果为1则就变成了一个串行队列一个一个的依次执行线程

    

    //第一种创建操作的方式

    NSBlockOperation *opr1 = [NSBlockOperation blockOperationWithBlock:^{

        //里边些添加到线程里的相关操作

        NSLog(@"--------%@",[NSThread currentThread]);

    }];

    //添加操作到队列中

    [queue addOperation:opr1];

    

    //第二中方式

    NSInvocationOperation *opr2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(methodCustom) object:nil];

    [queue addOperation:opr2];

 

    

    //第三种创建方式

    [queue addOperationWithBlock:^{

        NSLog(@"--------%@",[NSThread currentThread]);

    }];

 

 

// NSOperationQueue的依赖关系

 

- (void)dependExample{

    //比如我创建了三个线程 必须要前两个执行完再执行第三个线程

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    

    //线程1

    NSBlockOperation *opr1 = [NSBlockOperation blockOperationWithBlock:^{

        //执行线程内操作

    }];

    

    //线程1

    NSBlockOperation *opr2 = [NSBlockOperation blockOperationWithBlock:^{

        //执行线程内操作

    }];

    

    //线程1

    NSBlockOperation *opr3 = [NSBlockOperation blockOperationWithBlock:^{

        //执行线程内操作

        

        //执行完以后如果回到主线程刷新ui

        [[NSOperationQueue mainQueue] addOperationWithBlock:^{

          //刷新UI的操作

        }];

    }];

    

    //添加依赖关系

    [opr3 addDependency:opr1];

    [opr3 addDependency:opr2];

 

    //添加线程到队列

    [queue addOperation:opr1];

    [queue addOperation:opr2];

    [queue addOperation:opr3];

}

 

posted @ 2017-02-23 11:20  XL-MS  阅读(119)  评论(0编辑  收藏  举报