应该在主线程上进行UI更改。如果没有,它可能导致错误的行为,警告或崩溃(有时它仍然像预期的那样工作)。
无论如何,我已经开始在dispatch_async(dispatch_get_main_queue)) { ... }
中包装几乎所有的UI更改。最近我只是想知道这是否是最好的做法,所有与UI相关的东西,所以每个presentViewController
,dismissViewController
等,因为代码只是被数百个包裹溢出。
当然,有时显然不需要它;例如当用户点击了一个按钮,导致一些即时的UI更改。但是有一些方法可以在不同的上下文中调用,你应该通过预防性地包装它来确保它。最后我开始在所有地方实施,因为否则你必须非常小心,不要误判或忘记需要的地方。
你的方法是什么?
答案 0 :(得分:3)
我认为您应该每次都在主线程上明确调用UI更改,但仅在必要时 。
原理:如果您尚未在主线程上,则只需指定主线程。例如,在实现UIViewController
或表视图viewDidLoad
方法等方法的datasource
子类中,您可以假设您已经在主线程上。因此,将UI语句包装到其他async
块中是多余的,并且会产生混乱且不必要的详细代码。
另一方面,如果你在某个后台线程中,你应该明确表示你正在主线程上做某事。这将增加清晰度并增强可读性和可维护性。