ios - ios UI更新代码如何定义用于主调度

标签 ios swift multithreading user-interface grand-central-dispatch

我已经阅读了很多示例代码,我知道通常您希望更新用户界面的代码在主线程上执行。如果我遗漏了什么,xcode 会在运行时提示。只是有时。

那么更新用户界面的代码实际上是如何定义的? 是否显示更新 UI 的警报?在 UITableView 上调用 reloadData()?简单地设置 UILabel 的文本怎么样? 特别是对于这三个,我一直在我的应用程序中以两种方式看到和使用它,但无法真正找出规则。特别是因为 xcode 让我摆脱了两者......有时。

编辑:哦,我知道我的困惑从何而来。我认为你在哪个线程上是随机的。但是你实际上“总是”在主线程上,除非你做一些像在后台线程上运行的任务。

所以 Main Thread Checker 实际上并没有让我“逃脱”使用 reload() 和错误地更改我的 viewController 中的标签。只是保证我在主线程上。

我以为我必须突然将每个标签更改包装在 dispatch.async 中。

最佳答案

Xcode 您做某事并不意味着您应该做那件事。

重新加载表格 View 、显示警报和更改标签文本都是 UI 更新。它们都会改变您在屏幕上看到的内容,因此它们是 UI 更新。始终在主线程上执行这些操作。

非 UI 更改的内容:发送 HTTP 请求、处理数字、从某些数据库加载数据。它们不会改变您在屏幕上看到的内容。

关于ios - ios UI更新代码如何定义用于主调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53295400/

相关文章:

C# System.Threading.Timer 递归更新

ios - 不是地理 map 的 map 上的 AnnotationView

arrays - 不确定如何访问 firebase 数据库中的每个值

c++ - 在 C++ 中使用 Boost 的线程池无法正常工作

swift - 我无法快速覆盖从 cocoapods 导入的类的方法

ios - 在圆形路径中对线形 CAShapeLayer 进行动画处理

c# - 我的多线程创建或覆盖额外/现有线程

ios - iOS SDK 中的 MDM iPCU 配置文件安装失败

ios - 旋转速度和态度有什么区别?

ios - kAudioFormat 用于 .aif 音频文件转换?