1 #import "ViewController.h" 2 3 @interface ViewController () 4 5 @end 6 7 @implementation ViewController 8 9 - (void)viewDidLoad { 10 [super viewDidLoad]; 11 // Do any additional setup after loading the view, typically from a nib. 12 } 13 //NSOperation的子类NSInvocationOperation 14 //NSOperation 是一个抽象类(NSURLSession也是抽象类,用来封装子类,并不直接调用),与多线程没有关系,它是数据模型,保存代码段和数据 15 - (IBAction)invocationOperation:(id)sender { 16 NSInvocationOperation *invocationOp = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(loopIn) object:nil]; 17 //执行操作 18 [invocationOp start]; 19 20 21 22 } 23 -(void)loopIn 24 { 25 26 for (int i = 0; i < 1000; i++) { 27 //NSLog(@"a"); 28 NSLog(@"%@",[NSThread currentThread]); 29 } 30 } 31 - (IBAction)blockOperation:(UIButton *)sender { 32 33 NSBlockOperation *blockOp = [NSBlockOperation blockOperationWithBlock:^{ 34 //需要在线程里执行的内容 35 for (int i = 0; i < 8; i++) { 36 NSLog(@"%@",[NSThread currentThread]); 37 } 38 }]; 39 [blockOp start]; 40 41 } 42 //线程队列 43 - (IBAction)operationQueue:(id)sender { 44 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 45 //可以创建队列后,设置最大的并发数 46 queue.maxConcurrentOperationCount = 2; 47 //循环添加一百个NSOperation 48 for (int i = 0; i < 100; i++) { 49 NSBlockOperation *blockOp = [NSBlockOperation blockOperationWithBlock:^{ 50 NSLog(@"%@",[NSThread currentThread]); 51 }]; 52 //添加操作到线程队列中,添加后自动执行,不需要start 53 [queue addOperation:blockOp]; 54 } 55 56 } 57 - (IBAction)invocationQueue:(id)sender { 58 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 59 queue.maxConcurrentOperationCount = 2; 60 for (int i = 0; i < 100; i++) { 61 NSInvocationOperation *invocationOp = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(mengdefeng) object:nil]; 62 63 [queue addOperation:invocationOp]; 64 } 65 66 67 68 } 69 //输出当前线程 70 -(void)mengdefeng 71 { 72 NSLog(@"%@",[NSThread currentThread]); 73 } 74 //线程的优先级 75 - (IBAction)queuePriority:(id)sender { 76 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 77 //设置最大并发数 78 queue.maxConcurrentOperationCount = 1; 79 for (int i = 0; i < 100; i++) { 80 81 NSBlockOperation *blockOp1 = [NSBlockOperation blockOperationWithBlock:^{ 82 NSLog(@"1"); 83 }]; 84 NSBlockOperation *blockOp2 = [NSBlockOperation blockOperationWithBlock:^{ 85 NSLog(@"2"); 86 }]; 87 //设置操作的优先级 88 blockOp1.queuePriority = NSOperationQueuePriorityVeryLow; 89 blockOp2.queuePriority = NSOperationQueuePriorityVeryHigh; 90 [queue addOperation:blockOp1]; 91 [queue addOperation:blockOp2]; 92 } 93 94 95 } 96 - (void)didReceiveMemoryWarning { 97 [super didReceiveMemoryWarning]; 98 } 99 100 @end