我已经阅读了很多示例代码,我知道通常您希望更新UI的代码可以在主线程上执行。如果我缺少某些东西,xcode会在运行时抱怨。虽然只有有时候。

那么,如何真正定义用于更新您的用户界面的代码?
是否显示警报以更新UI?在UITableView上调用reloadData()?简单地设置UILabel的文本呢?
尤其是在这三个方面,我一直在我的应用程序中看到并使用过这两种方式,因此无法真正找出规则。尤其是因为xcode让我逃避了……有时候。

编辑:哦,我知道我的困惑来自哪里。我以为您在哪个线程上是随机的。但是实际上,您实际上总是在主线程上,除非您执行在后台线程上运行的类似任务的任务。

因此,主线程检查器实际上并没有让我通过使用reload()和错误地更改viewController中的标签来“逃脱”。只是保证我会在主线程上。

我以为我必须突然将每个标签更改都包装在dispatch.async中的任何地方。

最佳答案

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

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

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

07-26 06:27