始终将UI更改预先包装到主线程中?

时间:2016-05-01 10:47:13

标签: ios swift multithreading swift2 grand-central-dispatch

应该在主线程上进行UI更改。如果没有,它可能导致错误的行为,警告或崩溃(有时它仍然像预期的那样工作)。

无论如何,我已经开始在dispatch_async(dispatch_get_main_queue)) { ... }中包装几乎所有的UI更改。最近我只是想知道这是否是最好的做法,所有与UI相关的东西,所以每个presentViewControllerdismissViewController等,因为代码只是被数百个包裹溢出。

当然,有时显然不需要它;例如当用户点击了一个按钮,导致一些即时的UI更改。但是有一些方法可以在不同的上下文中调用,你应该通过预防性地包装它来确保它。最后我开始在所有地方实施,因为否则你必须非常小心,不要误判或忘记需要的地方。

你的方法是什么?

1 个答案:

答案 0 :(得分:3)

我认为您应该每次都在主线程上明确调用UI更改,但仅在必要时

原理:如果您尚未在主线程上,则只需指定主线程。例如,在实现UIViewController或表视图viewDidLoad方法等方法的datasource子类中,您可以假设您已经在主线程上。因此,将UI语句包装到其他async块中是多余的,并且会产生混乱且不必要的详细代码。

另一方面,如果你在某个后台线程中,你应该明确表示你正在主线程上做某事。这将增加清晰度并增强可读性和可维护性。