我是初学者的快速开发者。我被这个天气应用程序困扰了。我正在下载网站数据,然后在我的标签上显示。
不幸的是,整个过程需要10秒才能更新我的标签。
这可能不是因为网络连接,因为控制台会立即更新。
感谢您的建议。
答案 0 :(得分:12)
代码可能在辅助线程上运行。您所做的任何UI更改都应在主线程上进行。所以试试这个:
dispatch_async(dispatch_get_main_queue()) {
// update label
}
这应立即更新您的标签。
答案 1 :(得分:6)
以前,我们会选择调度方法(sync vs async),然后选择我们要将任务分派到的队列。更新的GCD颠倒了这个顺序 - 我们首先选择队列,然后应用调度方法。
Swift 3 :
现在在 Swift 3 中,GCD库的更新方式如下:
DispatchQueue.main.async(execute: {
// UI Updates
})
我希望这对你有所帮助。
答案 2 :(得分:0)
回答可能为时已晚,但在Swift 3中,逻辑应该是这样的。
DispatchQueue.global(qos: .background).async {
// Background Thread Or Service call Or DB fetch etc
DispatchQueue.main.async {
// Run UI Updates and other logic
}}
答案 3 :(得分:0)
您的代码有多个问题。
第一:它具有强大的参考周期
通过将其关闭来修复它。
[weak weakSelf = self]
SECOND:在主线程中更新UI
DispatchQueue.main.async {
//Update UI
weakSelf?.mReslut.text = ""
}