标签:
#import "ViewController.h" @interface ViewController () { NSOperationQueue *_queue; } @end @implementation ViewController /* 第二种 多线程技术 任务 NSOperation NSOperation是一个抽象类(当前类只声明方法不实现,由子类实现方法),创建任务我们需要创建NSOperation的子类对象 创建任务之后,需要把任务放入任务队列/线程池中 才会异步执行任务 */ - (void)viewDidLoad { [super viewDidLoad]; //创建一个线程池 _queue = [[NSOperationQueue alloc] init]; //设置 最大并发任务的个数 //最多允许多少个线程同时进行(异步执行) _queue.maxConcurrentOperationCount = 2; //如果设置为1 那么 线程池中的子任务之间就是串行执行(子线程之间同步) //第一种任务 //[self creatOperation1]; //第二种 //[self creatBlockOperation]; //第三类 //直接向线程池 添加 block 任务 [_queue addOperationWithBlock:^{ NSLog(@"block任务2"); for (NSInteger i = 0 ; i < 30; i ++) { [NSThread sleepForTimeInterval:0.2]; NSLog(@"block2:%ld",i); } }]; } #pragma mark - 带block 的任务 - (void)creatBlockOperation { //创建一个block 任务 NSBlockOperation *blockOp1 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"block 任务1"); for (NSInteger i = 0; i < 10; i++) { [NSThread sleepForTimeInterval:0.5]; NSLog(@"block1:-》i = %ld",i); } }]; //任务1结束之后会回调 下面的block [blockOp1 setCompletionBlock:^{ NSLog(@"block 任务1结束"); }]; //放入 线程池 [_queue addOperation:blockOp1]; } #pragma mark - 请求任务 - (void)creatOperation1 { //创建一个任务 NSInvocationOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(operation1:) object:@"任务1"]; //[op1 start];任务中start 表示 同步执行 //要想异步执行任务 需要放入线程池中 ,一旦放入线程池会立即异步执行 [_queue addOperation:op1]; //多增加几个任务 NSInvocationOperation *op2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(operation2:) object:@"任务2"]; //放入线程池 [_queue addOperation:op2]; NSInvocationOperation *op3 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(operation3:) object:@"任务3"]; //放入线程池 [_queue addOperation:op3]; } - (void)operation1:(id)obj { NSLog(@"func:%s obj:%@",__func__,obj); for (NSInteger i = 0; i < 10; i++) { NSLog(@"i:%ld",i); [NSThread sleepForTimeInterval:0.5]; } NSLog(@"任务1即将结束"); } - (void)operation2:(id)obj { NSLog(@"func:%s obj:%@",__func__,obj); for (NSInteger i = 0; i < 10; i++) { NSLog(@"i:%ld",i); [NSThread sleepForTimeInterval:0.5]; } NSLog(@"任务2即将结束"); } - (void)operation3:(id)obj { NSLog(@"func:%s obj:%@",__func__,obj); for (NSInteger i = 0; i < 10; i++) { NSLog(@"i:%ld",i); [NSThread sleepForTimeInterval:0.5]; } NSLog(@"任务3即将结束"); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
标签:
原文地址:http://my.oschina.net/u/2410306/blog/529824