多线程3

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

}

#warning mark nsoperation 本身不是线程,他只是封装了一定的代码段和数据去实现一个功能

- (IBAction)invocationOP:(UIButton *)sender {

NSInvocationOperation *invocation =[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(text) object:nil];

[invocation start];

}

//nsblock

- (IBAction)blockOP:(UIButton *)sender {

NSBlockOperation *block =[NSBlockOperation blockOperationWithBlock:^{

[self text];

}];

[block start];

}

//线程队列(!!!!!子线程队列是无序的)

- (IBAction)opretionqu:(UIButton *)sender {

//创建一个子线程队列(并发)(不需要我们在去手动开启)

NSOperationQueue *queue=[[NSOperationQueue alloc]init];

/* 依赖关系:(1)可保证执行顺序,(2)可以跨队列,而串行队列是不可以夸队列,如最后跟新UI则变成了在主队列朱,这是NSoperationqueue的优势

*/

//    NSBlockOperation *op1 =[NSBlockOperation blockOperationWithBlock:^{

//        NSLog(@"下载图片%@",[NSThread currentThread]);

//    }];

//    NSBlockOperation *op2=[NSBlockOperation blockOperationWithBlock:^{

//        NSLog(@"国栋开始P图%@",[NSThread currentThread]);

//    }];

//    NSBlockOperation *op3=[NSBlockOperation blockOperationWithBlock:^{

//        NSLog(@"保存图片%@",[NSThread currentThread]);

//    }];

//

//    NSBlockOperation *op4=[NSBlockOperation blockOperationWithBlock:^{

//        NSLog(@"刷新UI%@",[NSThread currentThread]);

//    }];

//添加依赖关系(依赖关系要添加到添加队列之前)

//    [op2 addDependency:op1];//也就是下载结束了之后再对图片进行修改,一种依赖关系;

//    [op3 addDependency:op2];

//    [op4 addDependency:op3];//夸队列添加依赖关系;

//    //设置最大并发数,也就是说当前对列最多由几个线程同时执行,一般情况下,设置为二或三(设置为0时,相当于不执行)

//    queue.maxConcurrentOperationCount =2;

//    //吧op1 op2 op3 添加到队列

//    [queue addOperation:op1];

//    [queue addOperation:op2];

//    [queue addOperation:op3];

//    //把OP4添加到主线程中

//    [[NSOperationQueue mainQueue] addOperation:op4];

NSBlockOperation *op1 =[NSBlockOperation blockOperationWithBlock:^{

NSLog(@"1");

}];

NSBlockOperation *op2=[NSBlockOperation blockOperationWithBlock:^{

NSLog(@"2");

}];

NSBlockOperation *op3 =[NSBlockOperation blockOperationWithBlock:^{

NSLog(@"3");

}];

NSBlockOperation *op4 =[NSBlockOperation blockOperationWithBlock:^{

NSLog(@"4");

}];

NSBlockOperation *op5 =[NSBlockOperation blockOperationWithBlock:^{

NSLog(@"5");

}];

NSBlockOperation *op6=[NSBlockOperation blockOperationWithBlock:^{

NSLog(@"6");

}];

[op2 addDependency:op1];

[op3 addDependency:op2];

[op6 addDependency:op3];

[op4 addDependency:op6];

[op5 addDependency:op4];

//    [op6 addDependency:op5];

[queue addOperation:op1];

[queue addOperation:op2];

[queue addOperation:op3];

[queue addOperation:op4];

[queue addOperation:op5];

[[NSOperationQueue mainQueue]addOperation:op6];

}

-(void)text{

NSLog(@"%@,%d",[NSThread currentThread],[[NSThread currentThread]isMainThread]);

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • NSThread 第一种:通过NSThread的对象方法 NSThread *thread = [[NSThrea...
    攻城狮GG阅读 853评论 0 3
  • 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项。当然也会给出几种多线程的案...
    张战威ican阅读 614评论 0 0
  • okay,多线程中最后一块小内容——NSOperation NSOperation的作用 配合使用NSOperat...
    小白文_Vincent阅读 423评论 0 0
  • 一.资源抢夺 2> 资源抢夺解决方案 @sychronized{ } dispatch_barrier_async...
    蓝心儿的蓝色之旅阅读 1,395评论 0 4
  • 林夕日生 不知为何,此时心中对猪八戒有了些许的羡慕。《春光灿烂猪八戒》中,他是多么快乐,多么乐观啊!他那一段又一段...
    林夕日生阅读 145评论 0 0