创建队列
GCD:
串行:create/主队列
并发:create/全局并发队列
NSOperation:
主队列:[NSOperationQueue mainQueue] 和GCD中的主队列一样,串行队列
非主队列 [[NSOperationQueue alloc]init] 非常特殊(同时具备了并发和串行的功能)
默认情况下非主队列是并发队列
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self blockOperation];
}
-(void)invocationOperationQueue
{
NSInvocationOperation *op1= [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(downLoad1) object:nil];
NSInvocationOperation *op2= [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(downLoad2) object:nil];
NSInvocationOperation *op3= [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(downLoad3) object:nil];
//创建队列
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
[queue addOperation:op1];
[queue addOperation:op2];
[queue addOperation:op3];
}
-(void)blockOperation
{
NSBlockOperation *op1=[NSBlockOperation blockOperationWithBlock:^{
NSLog(@"1---------%@",[NSThread currentThread]);
}];
NSBlockOperation *op2=[NSBlockOperation blockOperationWithBlock:^{
NSLog(@"2---------%@",[NSThread currentThread]);
}];
NSBlockOperation *op3=[NSBlockOperation blockOperationWithBlock:^{
NSLog(@"3---------%@",[NSThread currentThread]);
}];
[op2 addExecutionBlock:^{
NSLog(@"4-------------%@",[NSThread currentThread]);
}];
[op2 addExecutionBlock:^{
NSLog(@"5-------------%@",[NSThread currentThread]);
}];
[op2 addExecutionBlock:^{
NSLog(@"6-------------%@",[NSThread currentThread]);
}];
[op2 addExecutionBlock:^{
NSLog(@"7-------------%@",[NSThread currentThread]);
}];
[op2 addExecutionBlock:^{
NSLog(@"8-------------%@",[NSThread currentThread]);
}];
[op2 addExecutionBlock:^{
NSLog(@"9-------------%@",[NSThread currentThread]);
}];
[op2 addExecutionBlock:^{
NSLog(@"10-------------%@",[NSThread currentThread]);
}];
[op2 addExecutionBlock:^{
NSLog(@"11-------------%@",[NSThread currentThread]);
}];
[op2 addExecutionBlock:^{
NSLog(@"12-------------%@",[NSThread currentThread]);
}];
NSOperationQueue *queue=[[NSOperationQueue alloc]init];
[queue addOperation:op1];
[queue addOperation:op2];
[queue addOperation:op3];
//简便方法
//1.创建操作。2.添加到队列中
[queue addOperationWithBlock:^{
NSLog(@"4-------------%@",[NSThread currentThread]);
}];
}
-(void)invocationOperation
{
/*
参数1:目标对象 self
参数2:调用的方法的名称
参数3:参数
*/
NSInvocationOperation *op1=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(downLoad1) object:nil];
//启动
[op1 start];
}
-(void)downLoad1{
NSLog(@"%s---------%@",__func__,[NSThread currentThread]);
}
-(void)downLoad2{
NSLog(@"%s---------%@",__func__,[NSThread currentThread]);
}
-(void)downLoad3{
NSLog(@"%s---------%@",__func__,[NSThread currentThread]);
}
@end