iosNSOperation依赖关系

NSOperation 依赖关系,就像你和女友,互相需要对方一样。非常有意思。

#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

 


    //操作依赖

    //处理图片的耗时操作在子线程中执行

    NSBlockOperation *blockOp = [NSBlockOperation blockOperationWithBlock:^{

        

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

        

    }];

    

    NSBlockOperation *blockOp1 = [NSBlockOperation blockOperationWithBlock:^{

        NSLog(@"blockOp1 给图片添加水印 thread = %@",[NSThread currentThread]);

    }];

    

    

    NSBlockOperation *blockOp2 = [NSBlockOperation blockOperationWithBlock:^{

        [NSThread sleepForTimeInterval:2.0];

    

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

    }];

    

    

    //blockOp1添加依赖关系,使blockOp1blcokOp执行结束后执行

    [blockOp1 addDependency:blockOp];//也就是下载结束之后再给图片添加水印,然后保存图片。一种依赖关系

    [blockOp2 addDependency:blockOp1];

    

    //创建队列(把上面要干的事情丢到队列中同时执行--有点类似GCD中的异步,并发,开启了多个线程)

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

    //添加到队列

    [queue addOperation:blockOp];

    [queue addOperation:blockOp1];

    [queue addOperation:blockOp2];

    

    //设置队列中操作同时执行的最大数目,也就是说当前队列中呢最多由几个线程在同时执行,一般情况下允许最大的并发数2或者3

    [queue setMaxConcurrentOperationCount:3];

    

    //

    for (int i = 0; i<50; i++) {

        NSBlockOperation *blockOpp = [NSBlockOperation blockOperationWithBlock:^{

            NSLog(@"blockOpp i = %d thread = %@",i,[NSThread currentThread]);

        }];

        

        [queue addOperation:blockOpp];

        

    }

    

    //刷新UI的操作依赖关系必须在主线程中执行

    NSBlockOperation *blocOpMain = [NSBlockOperation blockOperationWithBlock:^{

        NSLog(@"blockOpMain 刷新UI 显示图片,thread = %@",[NSThread currentThread]);

    }];

    

    //这两个操作的依赖关系,跨队列

    [blocOpMain addDependency:blockOp2];

    

    //主队列

    [[NSOperationQueue mainQueue]addOperation:blocOpMain];

    

}

@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值