NSOperation多线程方式

  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
原文地址:https://www.cnblogs.com/DevinSMR/p/5321223.html