【问题标题】:Must Dispatch to Main Thread in iOS 11必须在 iOS 11 中调度到主线程
【发布时间】:2017-11-30 21:33:55
【问题描述】:

在 iOS 11 之前,我能够即时重新加载表视图数据,而无需将重新加载分派到主线程。但是,现在我正在安装了 iOS 11 的设备上进行测试,看来我必须将每个 UI 更新分派到主线程才能使其正常工作。否则我会得到空的 UI 元素。即所有行但没有标签的表格视图,或没有标题的按钮等。

有谁知道 iOS 11 中的哪些变化需要这个?有没有办法关掉它?

【问题讨论】:

  • 微软很久以前就用 C# 做到了这一点
  • 为了更好的衡量标准:the docs 稍微下降一点。搜索“重要”
  • 仅供参考 - 在 iOS 11 之前从后台重新加载表格视图从来都不是正确的做法。您是否没有注意到它运行得不是很好(例如,重新加载的延迟很长)?
  • 实际上,它工作得很好。根本没有任何延迟或随机的一次性怪癖。这就是为什么我很困惑。我觉得我错过了 iOS 开发的很大一部分,但我从未注意到在没有将其分派到主线程的情况下执行 [tableView reloadData] 之类的任何问题。

标签: ios grand-central-dispatch ios11 dispatch


【解决方案1】:

自古以来,Apple 就一直强调所有与 UI 元素的交互必须发生在主线程/GUI 线程上。不听从这个建议会导致奇怪的行为:有时它会正常工作,有时它不会。显然,现在他们已经改变了一些东西以使行为更可预测——它在您的特定情况下不再起作用,也许更普遍。

无论如何,我认为没有理由不简单地按照documentation 中的说明进行操作,并确保从主线程更新您的 UI。

【讨论】:

  • 大约是他们终于做出改变的时候了,我有很多错误,我就像 wtf... 哦等等这不在主线程上。
  • 是否有任何文档说明我应该将哪些特定的 UI 更新发送到主队列?似乎触摸等默认情况下在主队列上处理,但我是否需要显示对话框并从主队列查看视图?或者,如果 UI 正在呈现或更新,将其发送到主队列是一种好的做法吗?
  • @tentmaking 我在文档中添加了一个指向此类位置的链接。相关文本在黄色文本框中。我在很多地方都看到过类似的注释,但是由于这个特定的链接会将您带到 UIKit 的介绍页面,因此它可能是一个很好的参考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-08
相关资源
最近更新 更多