Swift中的线程简单解释

如果您来自其他平台,或者您是Swift的初学者,那么很难理解iOS中的线程。 这里有一些技巧,可帮助您使用GCD进行穿线。

首先,线程是关于管理应用程序中工作优先级的全部内容。 使您的代码更快地执行是很棒的,但是更重要的是用户感知的速度 您的应用程序将成为

作为开发人员,您的目标是确定用户可以看到并与之交互的所有事物的优先级。 它使您的应用程序感觉更快,更敏捷。 不要让用户等待他们没有注意到或关心的东西。


这是避免问题的最简单方法。 基本思想是确保所有视图和界面元素都不会被主队列中的其他项目阻止。

一个很好的例子:

通过仅在主线程上执行与UI相关的工作,可以确保不会阻止用户加载视图或退出视图。 避免使用会在主线程上加载数据,图像等的副作用的函数。


在iOS中执行工作有几个不同的优先级。 较高质量的优先级最高,并且立即处理,而较低质量的服务则在系统释放一些资源时处理。

下面列出了从最高到最低排名的不同质量。

创建具有服务质量的自己的队列真的很容易。 您只需为其提供标签和QoS。


要找出当前线程是什么,请在代码中的任何给定位置: Thread.current

这样,您可以确切地看到功能在哪个优先级上运行。

您还可以使用Thread.current.isMainThread检查您是否专门位于主线程上。


这是线程化时最容易出错的方法之一,但也是最容易避免的方法。

在代码中使用同步有很多好处,某些特殊情况需要同步,但是对于刚开始进行iOS开发的人来说,最好避免同步。

注意: 切勿在主DispatchQueue上调用sync,如以下示例所示:

还应避免在.userInteractive队列上使用同步,因为它的优先级与主队列相同。


  • 深入了解WWDC并发视频。
  • 如果您是视觉学习者,请阅读此文章。 它确实帮助我了解了不同的服务质量如何相互作用,以及如何调用不同的优先级。
  • Ray Wenderlich在线程方面也有很好的指导