在主线程上运行

时间:2017-06-25 15:42:35

标签: ios swift swift3

当我提出一个视图控制器或在swift中执行一个segue时,我应该在DispatchQueue.main.async {}中调用它,或者这是一个问题。我的问题是我应该在后台线程或主线程中运行它。如果我从数据库加载数据,我还应该在DispatchQueue.main.async {}中显示视图,还是应该在后台线程中运行它。

2 个答案:

答案 0 :(得分:0)

您应该在主线程上调用所有与UI相关的转换,更改和更新。但是你应该在哪里使用DispatchQueue.main.async {}

当从后台线程进行调用时使用它。例如,如果您正在从API下载数据和解析,通常在后台线程中执行此操作,一旦完成,可能您需要UI转换或更新,因此更新将在主线程中进行,并且从当前开始你在后台主题,你需要DispatchQueue.main.async {}在UI上进行更改。

答案 1 :(得分:0)

所有UI工作都应该在主线程上进行,因此,除非你在后台队列上,否则没有理由调度到主队列。在常见情况下,segue是通过用户交互(例如按下按钮)触发的,该用户交互已经在主线程上。

如果为正在呈现的视图加载数据需要很长时间,那么您可以异步调度到后台队列以加载它并在数据加载完成后调度回主队列。

由于这是异步的,因此意味着视图从呈现数据加载完成的时间开始就没有数据。这是您必须在UI中处理的内容。根据您的应用程序,一个示例可能是在加载数据时显示加载指示符。另一种方法是获取或传递最少量的数据,以异步方式显示和加载大量数据。