在swift中异步加载多个视图

时间:2017-04-16 00:37:27

标签: ios swift multithreading asynchronous grand-central-dispatch

我想知道有人会异步加载多个UI元素。就我而言,我的UIViewController有一个UISegmentControl。每个细分都有不同的UI方面要加载 例如seg1显示一个图像,seg2显示图像和一些文本等

如果我在显示UIViewController之前加载所有UI元素,那么就会出现明显的延迟。因此,我希望异步加载seg2...n以使UI感觉更具响应性。

我是否需要通过

加载所有内容
DispatchQueue.main.async { 
    // load UI
}

对于我想要在后台加载的每个seg?或者我可以在另一个线程上加载这些元素而不占用主线程吗?我知道你不应该在后台线程上更新UI ...但如果我使用异步代码,使用主线程仍会阻止UI吗?

1 个答案:

答案 0 :(得分:0)

您无法在后台线程上进行UI更改。几乎所有UIKit调用都必须在主线程上进行。因此,你很可能不走运。

相反,你应该做的是在后台线程上进行耗时的数字运算(例如下载和解析数据),然后使用DispatchQueue.main.async()将数据安装到主线程上的视图中耗时的工作已经完成。

如果它是引入延迟的UI设置并且无法加速它那么你可能会运气不好。