iOS应用程序有多个主线程



我们可以在一个应用程序中创建多个主线程吗?为什么所有UI更改都在主线程中进行?

我在面试中遇到过这些问题。我找不到任何解决办法。有谁能帮我找出这个问题的答案吗?这将有助于我在未来的面试和实现iOS应用。

提前感谢!

在你的应用程序中只有一个主线程,但是来自多个调度队列的任务可能在这个线程上执行。在主队列上分派的任务保证在主线程上运行。

一般来说,使用GCD你不会考虑线程,而是考虑从底层线程抽象出来的队列。它们提供了一种抽象级别,使管理任务变得更容易,而不必关心正在使用的线程的数量或状态。

自动布局引擎执行大量计算并应用规则,以达到布局解决方案。如果UI元素的属性发生了变化,那么自动布局解决方案就会失效,需要重新计算。

由于主队列是一个串行调度队列,将UI更新调度到主队列确保自动布局计算正在执行 UI属性正在更新,但不是同时更新(当然主队列上不止发生这两个活动,但我们这里只是处理自动布局)

不,只有一个主线程是由系统为应用程序创建的。主线程是直接向用户提供更改的线程。

直接连接用户的线程

查看Apple文档,它说,

主队列由系统自动创建,并与应用程序的主线程相关联。您的应用程序使用(且仅使用)以下三种方法中的一种来调用提交给主队列的块:

    调用dispatch_main
  • 调用UIApplicationMain (iOS)或NSApplicationMain (OS X)

  • 在主线程上使用CFRunLoopRef

与全局并发队列一样,调用dispatch_suspend,Dispatch_resume、dispatch_set_context等没有作用当与此函数返回的队列一起使用时

现在,让我们举一个例子,如果你正在下载一个图像,并希望显示给用户。现在,如果你在主线程上下载它,那么它会阻塞其他UI,直到它完成下载。因此,您不应该在主线程或同步上下载它。你应该异步下载,当下载完成后,你应该在main thread上显示给用户,这样下载完成后它会快速显示给用户。

相关内容

  • 没有找到相关文章

最新更新