美文网首页
IOS线程中使用依赖的2种方法

IOS线程中使用依赖的2种方法

作者: 开米肉丝酱 | 来源:发表于2018-04-08 15:31 被阅读0次

业务中,我们往往需要在业务逻辑中使用线程的依赖 比如A业务要等B和C等线程处理完毕之后再去执行 以下就是线程间使用依赖的2种方法

第二种 使用NSOperation实现

//Operation实现线程依赖

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

NSOperation * q1 = [NSBlockOperation blockOperationWithBlock:^{
    sleep(1);
    NSLog(@"测试");
} ];

NSOperation * q2 = [NSBlockOperation blockOperationWithBlock:^{
    sleep(2);
    NSLog(@"这是一个");
}];

NSOperation * q3 = [NSBlockOperation blockOperationWithBlock:^{
    sleep(3);
    NSLog(@"线程依赖");
}];

[q1 addDependency:q3];
[q3 addDependency:q2];

[queue addOperation:q1];
[queue addOperation:q2];
[queue addOperation:q3];

第二种 使用GCD实现

//GCD 实现线程依赖
dispatch_semaphore_t sephore1 = dispatch_semaphore_create(0);
dispatch_semaphore_t sephore2 = dispatch_semaphore_create(0);


dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSLog(@"这是一个");
    dispatch_semaphore_signal(sephore1);
});


dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    dispatch_semaphore_wait(sephore1, DISPATCH_TIME_FOREVER);
    NSLog(@"线程依赖");
    dispatch_semaphore_signal(sephore2);
});

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    dispatch_semaphore_wait(sephore2, DISPATCH_TIME_FOREVER);
    NSLog(@"测试");
});

两种方法综合下来 NSOperation 代码简单易读 操作性强 GCD 是NSOperation的底层 所以在线程性能上要好,特别如果是大量计算的线程依赖GCD性能会好一些。

相关文章

  • iOS多线程知识(二) - NSThread

    iOS多线程知识(一)-基础知识 上篇中说到了多线程创建的四种方法,在iOS中使用较多的是后面三种方法。本篇将介绍...

  • IOS线程中使用依赖的2种方法

    业务中,我们往往需要在业务逻辑中使用线程的依赖 比如A业务要等B和C等线程处理完毕之后再去执行 以下就是线程间使用...

  • iOS中的多线程

    iOS中的多线程 现存的iOS多线程解决方案 现在在iOS中要实现多线程有如下四种方法。 PthreadsNSTh...

  • 如何自定义NSOperation

    在iOS中使用线程主要是GCD,和NSOperation 两种方式。 GCD 对线程依赖,线程取消支持的不是很好,...

  • React native 升级0.6的坑

    iOS中依赖的安装0.6中iOS全部使用pod安装依赖,添加完依赖,如果报错,记得在iOS目录下执行pod ins...

  • iOS 通知多线程的使用

    iOS 通知多线程的使用 iOS 通知多线程的使用

  • D29:多线程

    目录 一. 多线程的概念(程序, 进程, 线程) 二. 为什么使用多线程 三. 怎样创建线程(2种方法) 四. 怎...

  • OC--各种线程锁

    参考:正确使用多线程同步锁@synchronized()iOS中的锁iOS多线程安全详解iOS 常见知识点(三):...

  • Java多线程之线程池(ThreadPoolExecutor)实

    在上一篇文章Java中实现多线程的3种方法介绍和比较中,我们讲解了Java中实现多线程的3种方法。使用多线程,就必...

  • iOS多线程使用踩过的坑

    iOS多线程使用踩过的坑 iOS 开发过程中,我们经常使用系统提供的方法使用多线程(全局并发)包括: 使用起来很方...

网友评论

      本文标题:IOS线程中使用依赖的2种方法

      本文链接:https://www.haomeiwen.com/subject/zktmhftx.html