首页 >iOS开发

iOS-浅谈并发任务GCD信号量与其替代品Bolts(Facebook出品)

2018-08-22 14:20 编辑: 游星啊 分类:iOS开发 来源:狼居胥侯

很多从事iOS开发过程当中很少听到信号量,也很少用到,但是这个在小编看来是非常重要的思想。今天小编就来说说信号量以及信号量的完美替代品Bolts(Facebook出品的库)。

先想想这样一个场景:启动app之后,需要先并发发送两个数据请求requestA与requestB,同时这两个数据请求还会做一些数据存储方面的工作,然后当requestA与requestB都完成之后,再做数据请求requestC。(记住一点:requestC一定要在requestA与requestB都完成之后才能执行)。

以下是我找到的一个流程图:

我们应该知道这绝对是一个很常见的需求,很多人在看到这个需求是很自然的想到使用NSOperation+NSNotificationCenter来实现,但是这样就费尽了。

在小编看来:常见的需求与场景苹果(或者其余的公司,比如谷歌,Facebook,微软等)绝对也会想到了,毕竟他们公司的编程能力远胜于我们。既然他们想到了,那必然在SDK当中必然是集成了。

放到iOS开发当中,苹果就提供了一个方案那就是GCD信号量

GCD信号量的使用涉及到三个方法,分别是:

  1. dispatch_semaphore_create(创建一个信号量)

  2. dispatch_semaphore_signal(发送一个信号)

  3. dispatch_semaphore_wait(等待)

以下便是信号量的简单使用:

执行结果如下:

由图2可以看到线程3在线程1和线程2执行完毕之后才执行,这就是信号量的使用。此外,信号量还有很多功能,有时间的可以自行研究。

但是这样写的话我是看着不太习惯,而且这个也是需要写逻辑的,很可能出现bug,比如少写dispatch_semaphore_wait等。

信号量是给了这么一个解决问题的思路,很多第三方库也是实现了此类的功能,其中Facebook出品的Bolts就是最好用的。

废话不多说,直接上代码:

使用Bolts实现多个数据请求并发就是这么简单。

除此之外,Bolts还有更加广泛的功能,比如:先执行task1,task1成功之后再执行task2。代码如下:

github链接SemaphoreAndBolts,可以设置task1与task2中的isSuccess以及Bolts的官方文档来综合学习Bolts。

作者:狼居胥侯

链接:https://www.jianshu.com/p/0f83ac97e8ff

搜索CocoaChina微信公众号:CocoaChina
微信扫一扫
订阅每日移动开发及APP推广热点资讯
公众号:
CocoaChina
我要投稿   收藏文章
上一篇:重识iOS之Category
我来说两句
发表评论
您还没有登录!请登录注册
所有评论(0

综合评论

相关帖子

sina weixin mail 回到顶部