[英]Do we need to update UI in main thread or in main queue?
我读了很多文章,指出我们需要更新主线程中的UI,但是每当我更新我的UI时总是代码。
DispatchQueue.main
反过来给了我Queue而不是线程。 我将如何访问该线程或两者是一样的?
想象一下火车站,火车的数量与它离开的平台的数量相同。
因此,如果您想要#1列车,那么您就站在#1平台上。 没有先站在平台上就无法上火车。 其他想乘坐这列火车的人也站在平台上等待他们上火车的机会。
火车是线程。 平台就是队列。
如果你想进入主线程,请进入主队列。
DispatchQueue管理特定线程上代码的执行。
来自Apple文档:
DispatchQueue管理工作项的执行。 提交到队列的每个工作项都在系统管理的线程池上处理。
所以,当你打电话的时候
DispatchQueue.main.async {
//your code
}
此代码将提交到main
队列,而main
队列又在主线程上运行。
从并发编程指南中的Dispatch Queues :
主调度队列
主调度队列是一个全局可用的串行队列,它在应用程序的主线程上执行任务。 此队列与应用程序的运行循环(如果存在)一起工作,以将排队任务的执行与附加到运行循环的其他事件源的执行交错。 因为它在应用程序的主线程上运行,所以主队列通常用作应用程序的关键同步点。
通常,GCD维护一个线程池,并且调度队列和线程之间没有1-1关系。 但主队列是特殊的:它绑定到主线程,调度到主队列的所有项都在主线程上执行。 (对于OperationQueue.main
也是如此。)
将代码调度到DispatchQueue.main
(或OperationQueue.main
)可确保它在主线程上执行,并与其他UI更新同步。
在这个意义上,术语“在主线程上执行”和“在主队列上执行”通常可互换使用。
//主线程
DispatchQueue.main.async
{
//eg.
tableview.reloadData()
// here you update your UI.
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.