iOS开发交流群:301058503
上次提到,利用信号量实现异步线程的同步执行,开发中还经常遇到一种场景:有多个异步的网络请求并发执行,在所有的网络请求完成后统一刷新界面,该如何处理呢?
我们可以用最笨的方法,在所有网络请求开始前,记录网络请求的总数totoalCount;然后用一个变量count记录网络请求结束的数量,在每一个网络请求结束后变量count++;当totoalCount==count时刷新界面。这样做也可以实现上述场景,但是感觉有点low,而且代码有点乱。有没有高大尚一点的做法呢?Dispatch Group闪亮登场。
首先,先了解一下Dispatch Group几个API的用法
- dispatch_group_create:创建一个group,初始计数为0;
- dispatch_group_enter:负责将group的计数+1;
- dispatch_group_leave:负责将group的计数-1;
- dispatch_group_notify:监听group计数,当group计数为0时,执行里面的操作。
请看下面的例子:三个dispatch_async异步线程里面的打印顺序不固定,但dispatch_group_notify里面的打印肯定是在三个dispatch_async都打印完之后。
dispatch_group_t group = dispatch_group_create();//group计数=0
dispatch_group_enter(group);//group计数+1