【发布时间】:2021-04-12 20:35:42
【问题描述】:
场景:呈现给用户的 UIAlertController 具有一个按钮,以及一个更新 UI 以指示按下按钮的处理程序块。处理程序块中的代码被包裹在一个 dispatch_async 中,以确保代码在主线程上运行。
问题:代码审查员说 dispatch_async 是不必要的,但我们都找不到支持它的引用。关于处理程序的 Apple 文档只说
handler 当用户选择动作时执行的块。该块没有返回值,并将选定的操作对象作为其唯一参数。
我找不到任何可以保证他的立场的东西——UIAlertAction 处理程序块将始终在主线程上运行——是正确的,在没有这样的情况下,我倾向于保留 dispatch_async。无论哪种方式都有明确的说法吗?
【问题讨论】:
-
处理程序块被执行以响应用户交互;点击按钮。 UI 交互总是发生在主线程上。正如您不需要在
@IBAction中分派到主线程一样,您也不需要在此处分派。审稿人是对的。 -
您可以对其进行测试——尝试在没有
dispatch_async的情况下运行代码。如果主线程检查器没有捕捉到线程错误,那你就没事了。 -
@Paulw11 - 我认为问题不是“他是否正确”,而是“是否保证正确”?
-
保证是UI交互。
标签: ios objective-c objective-c-blocks uialertaction