iOS中的队列多线程

要创建吸引用户每天使用它的iOS应用,精美的设计必不可少,因此应用中的快速体验也至关重要。 几个月前,我下载了一个教您如何烹饪的应用程序。 我在使用它的10分钟内删除了它。

为什么? 图片无法加载,我被卡在加载标牌上很长时间(例如1-2分钟?)。 这很令人沮丧,因为我想看看教程中的菜式。 好吧,这没有发生。

那么到底需要发生什么呢?

排队是有益的,也是麻烦的

iPhone内有一个CPU(中央处理单元)。 CPU一次只能执行一项任务。 待处理的任务排成一行 。 将排队视为排队等候餐厅座位的人。 当服务员有空位时,将排在第一位。 先进先出(FIFO)。

那么,我们的手机又如何如此迅速地响应我们的触摸和动作? 答案是:多线程。 多线程允许处理器创建并发线程以便在处理器之间进行切换。 结果,可以同时执行多个任务。

每个线程都有自己的队列。 就像剧院票房的台词一样。 一条线供客户购买机票,另一条线供客户打印预订的机票。 人们在每一行同时进出。

相同的概念适用于iOS生态系统。 如果我们在应用程序内部具有多线程,则不会发生像烹饪应用程序这样的悲剧。 我们不必从服务器获取配方,而不必等待它完成然后显示图像。 让我们看看我们如何做到这一点!

在iOS中引入Grand Central Dispatch(GCD)

Grand Central Dispatch将任务分配给不同的线程(不同的队列)。 例如,主线程负责从服务器获取配方数据,而后台线程将更新UI并显示图像。 因此,该应用程序保持响应状态。 很好,对吗?

GCD API围绕 DispatchQueue 。 此类使我们能够创建/修改队列,以及同步或异步分配代码 和更多。

同步方式 为了。 当您执行同步操作时,以后出现的所有内容都必须等待上一个操作完成才能开始。

另一方面,当您异步执行某项操作时,以下代码可以立即运行。 在其他队列上启动任务后,它将立即将控件返回到当前队列,而无需等待其结束。 异步方法不会阻止当前队列上的任务执行。

如您所见,当队列给我们带来麻烦时,我们可以通过它的变体来巧妙地处理它。

请继续关注第二部分–代码中的GCD实现!