GCD 与 AFNetworking 结合使用

2017-06-10  本文已影响88人  乡水情缘

对于iOS开发中的网络请求模块,AFNetworking的使用应该是最熟悉不过了,但你是否把握了网络请求正确的完成时机?什么是信号量?
1.先说什么是信号量。

信号量:就是一种可用来控制访问资源的数量的标识,设定了一个信号量,在线程访问之前,加上信号量的处理,则可告知系统按照我们指定的信号量数量来执行多个线程。其实,这有点类似锁机制了,只不过信号量都是系统帮助我们处理了,我们只需要在执行线程之前,设定一个信号量值,并且在使用时,加上信号量处理方法就行了。

信号量有3个函数,分别是:

创建信号量,参数:信号量的初值

dispatch_semaphore_create(信号量值)

等待降低信号量 dispatch_semaphore_wait(信号量,等待时间)

提高信号量 dispatch_semaphore_signal(信号量)

2.在真实开发中,我们通常会遇到如下问题:

①一个界面存在多个请求,希望所有请求完成之后才去进行下面的操作。

解决方案很容易想到通过线程组进行实现。代码如下:

3623363-aa2113b3b5d07a07.png

对于App请求数据大部分人都会选择AFNetworking。使用AFN异步请求,请求的数据返回后,就刷新相关UI。如果某一个页面有多个网络请求,我们假设有三个请求,request1、request2、request3,而且UI里的数据必须等到request1、request2、request3全部完成后刷新后才显示。
这里我们就要借助GCD中的信号量dispatch_semaphore进行实现,即营造线程同步情况。

dispatch_semaphore信号量为基于计数器的一种多线程同步机制。用于解决在多个线程访问共有资源时候,会因为多线程的特性而引发数据出错的问题。

如果semaphore计数大于等于1,计数-1,返回,程序继续运行。如果计数为0,则等待。

dispatch_semaphore_signal(semaphore)为计数+1操作。dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)为设置等待时间,这里设置的等待时间是一直等待。

欢迎更多开发者加qq 556120515 群进来交流

把网络请求进行如下修改:

3623363-a00a08f73dbe0a29.png
可以参考下面这篇文章 http://www.jianshu.com/p/c5a4a3fce93d
具体demo的下载地址https://github.com/xiaoshunliang/OCTestGCD
上一篇下一篇

猜你喜欢

热点阅读