iOS进阶之GCD-dispatch_group

一,需求背景

在日常开发工作中,我们时常需要将一个耗时操作放在子线程处理,如文件图片上传下载等。一方面我们是希望任务的执行不要阻碍主线程的操作,同是也希望该操作可以较快的被执行完毕。单个子线程的UI处理我们需要回到主线程,因为UIKit框架是线程不安全的。但我们不可以在子线程处理UI的原因,不仅仅是因为这个。有兴趣的同学可以研究一下,很有意思。
那么假如现在我们需要下载一个极端一点的图片,非常大。在单个子线程需要执行5秒钟。如果当前的场景需要尽快的下载完毕这张图片,显然这个等待时间太久了。所以,我们可以利用子线程并发处理,将文件分段,在不同的异步子线程中处理。这样,分五段,相同网络下,我们可以将时间缩短很多。但我们需要的是一张完整的图片,而不是某个片段,所以我们需要将几个片段组合。但组合之前,需要确保每个片段都已经下载完毕。而且,为了尽量缩短时间,我们需要在最后一个片段下载完毕后,立即进行拼装展示。监听某些异步的线程任务,待最慢的一个完成时,即使得到通知,这就是dispatch_group需要做的事情了。

二,具体实现场景

1,单独下载图片M

    一个异步子线程

2,我们将M图片分解成a,b,c,d四段。

    四个异步子线程

三,真正有意思的东西

    enter+leave

四,超级有意思的东西

    wait

待续。。。。

你可能感兴趣的:(iOS进阶之GCD-dispatch_group)