• OC 线程操作3


     1 #import "ViewController.h"
     2 
     3 @interface ViewController ()
     4 
     5 @end
     6 
     7 @implementation ViewController
     8 
     9 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    10     
    11     [self BlockOperation];
    12 
    13 }
    14 
    15 -(void)BlockOperation{
    16     //1.创建任务
    17     NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
    18         NSLog(@"op1----%@", [NSThread currentThread]);
    19     }] ;
    20     
    21     NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
    22         NSLog(@"op2----%@", [NSThread currentThread]);
    23     }] ;
    24 
    25     NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
    26         NSLog(@"op3----%@", [NSThread currentThread]);
    27     }] ;
    28     
    29     //2.追加任务 注意:如果一个线程中的任务数量大于1,那么会开子线程并发执行任务,会开子线程但是不一定所有任务都在子线程运行,有可能某个任务是在主线程执行
    30     [op3 addExecutionBlock:^{
    31         NSLog(@"op4----%@", [NSThread currentThread]);
    32     }];
    33     
    34     [op3 addExecutionBlock:^{
    35         NSLog(@"op5 ----%@", [NSThread currentThread]);
    36     }];
    37     
    38     
    39     //3.操作监听, 可以放到任何位置,这个block也是并发执行的,不是一定在执行完op3 就会执行,他们不一定在同一个线程
    40     op3.completionBlock = ^{
    41         NSLog(@"op3.completionBlock=====");
    42     };
    43     
    44     //4.启动操作
    45 //    [op1 start];
    46 //    [op2 start];
    47 //    [op3 start];
    48     
    49     //5.依赖需要添加到队列之前,可以跨队列依赖,并且不能循环依赖,循环依赖不会执行循环的代码, 执行其他的
    50     [op1 addDependency:op2];
    51     [op2 addDependency:op3];
    52     
    53     
    54     //6. 创建非主队列, 主队列是[NSOperationQueue mainQueue]
    55     NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    56     NSOperationQueue *queue2 = [[NSOperationQueue alloc] init];
    57     
    58     //7、添加任务    使用继承的方法可以看到  执行顺序 是 [op3 start]方法 - main 方法


    59 [queue addOperation:op3];//默认添加了 [op3 start]方法 60 [queue addOperation:op1];//默认添加了 [op1 start]方法 61 [queue2 addOperation:op2];//默认添加了 [op2 start]方法 62 63 64 //8.线程同时执行的数量 线程同时执行的数量,-1是最大值, 0是同步执行(打印结果线程不是一样的, 但是执行顺序 一定是1234,打印多少次都是1234), 65 queue.maxConcurrentOperationCount = 3; 66 67 //9.简便添加方法 这个等于 步骤1 和步骤4 ,但是没办法添加依赖和监听,看具体使用环境 一般回到主队列刷新UI使用 68 [queue addOperationWithBlock:^{ 69 NSLog(@"op110 ----%@", [NSThread currentThread]); 70 }]; 71 72 [[NSOperationQueue mainQueue] addOperationWithBlock:^{ 73 NSLog(@"回到主队列了-%@", [NSThread currentThread]); 74 }]; 75 } 76 77 -(void)InvocationOperation{ 78 /** 79 参数1:使用对象 80 参数2:调用方法名称 81 参数3:前面方法需要参数 82 */ 83 NSInvocationOperation *op1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(downLoad) object:nil]; 84 85 //开启线程 86 [op1 start]; 87 // op1.cancel; 88 89 // [self downLoad]; //这个和上边 两行一样。。。 90 } 91 92 -(void)downLoad{ 93 NSLog(@"%s----%@", __func__, [NSThread currentThread]); 94 } 95 @end
  • 相关阅读:
    BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第13章节--使用业务连接服务创建业务线解决方式 创建启用BCS的业务解决方式
    POI 导入excel数据自己主动封装成model对象--代码分析
    四旋翼飞行器Quadrotor飞控之 PID调节(參考APM程序)
    Detours改动段属性漏洞
    C++中父类的虚函数必需要实现吗?
    深入理解JavaScript系列(12):变量对象(Variable Object)
    CSS 类、伪类和伪元素差别具体解释
    Qt Quick 之 PathView 具体解释
    读《一年一度屈原祭,端午时节话公知》有感
    Volley简单学习使用五—— 源代码分析三
  • 原文地址:https://www.cnblogs.com/qingzZ/p/9262376.html
Copyright © 2020-2023  润新知