美文网首页iOS
ios线程依赖的处理方式

ios线程依赖的处理方式

作者: 胡子仙森 | 来源:发表于2017-04-12 00:23 被阅读116次

在iOS开发中,我们经常会用到一个线程需要等待另一个结束才能进行的需求,这种需求其实有很实用的解决办法.下面我将列举一些目前用到的两种方式.

一.GCD

强大的GCD我们经常会使用到,它的功能网上已经有很多教程,这里就不一一赘述了,直接上代码:

dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

for(inti  =0; i <10000; i++) {

//just for delayed}NSLog(@"dispatch semaphore send");

dispatch_semaphore_signal(semaphore);

});

NSLog(@"waiting...");

dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

控制台的打印是:

waiting...dispatchsemaphoresend

这里需要注意的是,

dispatch_semaphore_signal(semaphore)

这个方法必须要在另一个线程中调用.

而且,

dispatch_semaphore_wait()

方法一定不能在主线程中调用,因为一不小心就会阻塞当前线程,造成主线程卡死.

二.NSBlockOperation

直接上代码:

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

NSBlockOperation * op1 = [NSBlockOperation blockOperationWithBlock:^{

 for(inti =0; i <1000; i++) {

 }

 NSLog(@"op1 is finish");

}];

NSBlockOperation * op2 = [NSBlockOperation blockOperationWithBlock:^{

for(inti =0; i <1000000; i++) {

}

NSLog(@"op2 is finish");

}];

[op1 addDependency:op2];

[queueaddOperation:op1];

[queueaddOperation:op2];

控制台打印的是:

2016-09-23 18:09:07.377 op2 is finish

2016-09-23 18:09:07.378 op1 is finish

可以看出op1添加依赖之后,op2首先打印完毕,然后打印op1.

小结

这就是目前常用的两种处理线程依赖的方式,很简单,但是往往能解决大麻烦.

相关文章

  • iOS 多线程之间有依赖时的处理方式

    iOS 多线程之间有依赖时的处理方式

  • ios线程依赖的处理方式

    在iOS开发中,我们经常会用到一个线程需要等待另一个结束才能进行的需求,这种需求其实有很实用的解决办法.下面我将列...

  • [iOS] GCD是神马-队列与并发

    iOS多线程的处理方式主要有四种:pthread / NSThread / GCD / NSOperation,其...

  • iOS线程依赖

    1.线程依赖.目前在 iOS 和 OS X 中有两套先进的同步 API 可供我们使用:NSOperation 和 ...

  • 如何自定义NSOperation

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

  • iOS 线程列队依赖

    iOS的日常业务开发中,有的时候会出现诸如任务C和D要等待任务A和B结束,需要A和B的数据支持,此类的线程列队依赖...

  • iOS 线程同步和线程依赖

    相关概念 线程同步:不同线程下的任务要做到完成最终监听。适合所有任务都完成才能进行下一步的情况下。 线程依赖:即线...

  • iOS-多线程1-GCD

    首先看一下iOS中多线程的实现方案 这些多线程方案的底层都是依赖pthread NSThread线程生命周期是程序...

  • 底层原理:多线程

    iOS中常见多线程方案 NSThread 、 GCD 和 NSOperation 底层都是依赖于 pthread ...

  • iOS-面试题3-多线程

    目录: GCD 加锁方案 一. GCD 说一下iOS中多线程的实现方案 ① 这些多线程方案的底层都是依赖pthre...

网友评论

本文标题:ios线程依赖的处理方式

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