NSOperation 和 GCD

GCD:仅仅支持先进先出原则(FIFO),不支持线程之间的依赖关系,但是GCD更接近底层执行效率更高。

NSOperationQueue: 支持优先级,线程之间的依赖关系。而NSOperation是基于GCD

GCD:

        //后台执行的线程
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            NSLog(@"这里是后台执行");
        });
        //主线程执行
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"这里是主线程执行");
        });
        //一次性执行的
        static dispatch_once_t onceThread;
        dispatch_once(&onceThread,^{
            NSLog(@"一次性线程");
        });
        //延时2秒执行
        double setTime = 2.0;//设置的时间
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, setTime*NSEC_PER_SEC);//设置延时
        dispatch_after(popTime, dispatch_get_main_queue(), ^{
            NSLog(@"延时两秒后执行");
        });
        //GCD让后天两个线程并行执行,然后等待两个线程都结束后再汇总执行结果
        dispatch_group_t group = dispatch_group_create();//创建一个组
        dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
            NSLog(@"第一个线程执行的结果");
        });
        dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
            NSLog(@"第二个线程执行结果");
        });
        dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{
            NSLog(@"这是汇总过后的结果");
        });

NSOperation:

//创建队列
    NSOperationQueue *queue = [[NSOperationQueue alloc]init];
    //获得主队列
    NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
    //创建下载小说的操作
    NSBlockOperation *downLoadOperation = [NSBlockOperation blockOperationWithBlock:^{
        //
        NSLog(@"下载小说%@",[NSThread currentThread]);
    }];
    //创建下载小说的操作
    NSBlockOperation *openLoadOperation = [NSBlockOperation blockOperationWithBlock:^{
        //
        NSLog(@"解压小说%@",[NSThread currentThread]);
    }];
    //创建下载小说的操作
    NSBlockOperation *uiLoadOperation = [NSBlockOperation blockOperationWithBlock:^{
        //
        NSLog(@"跟新UI%@",[NSThread currentThread]);
    }];
    //设置依赖关系
    [openLoadOperation addDependency:downLoadOperation];
    //添加下载和解压操作
    [queue addOperations:@[downLoadOperation,openLoadOperation] waitUntilFinished:YES];
    //主队列跟新ui
    [mainQueue addOperation:uiLoadOperation];

可能是用的比较少的原因。所以理解的也不是很透彻。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值