Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIAlertAction处理程序块和主线程_Ios_Objective C_Objective C Blocks_Uialertaction - Fatal编程技术网

Ios UIAlertAction处理程序块和主线程

Ios UIAlertAction处理程序块和主线程,ios,objective-c,objective-c-blocks,uialertaction,Ios,Objective C,Objective C Blocks,Uialertaction,场景:用户将看到一个具有按钮的UIAlertController,以及一个更新UI以指示按钮按下的处理程序块。处理程序块中的代码包装在dispatch_async中,以确保代码在主线程上运行 问题是:一位代码评审员说,dispatch_async是不必要的,但我们两人都找不到支持这一点的引文。苹果公司关于处理器的文档只说 处理程序用户选择操作时要执行的块。此块没有返回值,并将选定的动作对象作为其唯一参数 我找不到任何东西可以保证他的位置——UIAlertAction处理程序块将始终在主线程上运行

场景:用户将看到一个具有按钮的UIAlertController,以及一个更新UI以指示按钮按下的处理程序块。处理程序块中的代码包装在dispatch_async中,以确保代码在主线程上运行

问题是:一位代码评审员说,dispatch_async是不必要的,但我们两人都找不到支持这一点的引文。苹果公司关于处理器的文档只说

处理程序用户选择操作时要执行的块。此块没有返回值,并将选定的动作对象作为其唯一参数

我找不到任何东西可以保证他的位置——UIAlertAction处理程序块将始终在主线程上运行——是正确的,如果没有这样的东西,我倾向于保持dispatch_异步。“最终声明”是Paulw11已经引用的事实:所有用户交互都发生在主线程上。保证这一事实对iOS编程至关重要;如果没有它,整个运行时都会崩溃。除了到处都有文档记录之外,不需要对其进行文档记录

因此,除非您找到某种邪恶的方法,以编程方式在主线程之外运行此方法,否则它将运行的唯一方法是因为用户点击了按钮,因此您确实可以保证您在主线程上。你应该改变你的倾向;额外的调度是不必要的浪费


从另一个角度来看:只要你冒着被取消主线程的风险,苹果就会记录下来。他们在这里不这样做,所以没有这种风险。

处理程序块是响应用户交互而执行的;点击按钮。UI交互总是发生在主线程上。正如您不需要在
@IBAction
中分派到主线程一样,您也不需要在此处分派。审阅者是正确的。您可以测试它--尝试在不使用
调度\u async
的情况下运行代码。如果主线程检查器没有捕捉到线程错误,那么您就没事了。@Paulw11-我不认为问题是“他正确吗”而是“它保证正确吗”?这是保证的,因为它是一个UI交互。