Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.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 什么';GCD中.userInitiated和.userInteractive的区别是什么?_Ios_Swift3 - Fatal编程技术网

Ios 什么';GCD中.userInitiated和.userInteractive的区别是什么?

Ios 什么';GCD中.userInitiated和.userInteractive的区别是什么?,ios,swift3,Ios,Swift3,我想知道它们之间有什么区别,我正在尝试更新UI中的某些内容,因此我必须使用主线程来完成,但不确定应该使用哪一个来完成我想要的 谢谢“用户发起”表示用户直接请求此操作,并且可能正在等待,但UI本身并不迫切需要结果。“获取新tweet,因为用户执行了拉刷新”或“重新计算提示”。这些事情需要快速发生,但不是立即发生。一旦计算完成,您可能不会立即再次要求它 “用户交互”是指用户直接与此操作的结果实时交互。用户界面现在需要一个结果,否则会出现滞后。您可能会快速重复地请求此操作。这是最高优先事项 有关这些类

我想知道它们之间有什么区别,我正在尝试更新UI中的某些内容,因此我必须使用主线程来完成,但不确定应该使用哪一个来完成我想要的

谢谢

“用户发起”表示用户直接请求此操作,并且可能正在等待,但UI本身并不迫切需要结果。“获取新tweet,因为用户执行了拉刷新”或“重新计算提示”。这些事情需要快速发生,但不是立即发生。一旦计算完成,您可能不会立即再次要求它

“用户交互”是指用户直接与此操作的结果实时交互。用户界面现在需要一个结果,否则会出现滞后。您可能会快速重复地请求此操作。这是最高优先事项


有关这些类的详细信息,请参见

,因此我应该使用.userInteractive来更新UIC。合理的经验法则是:如果此块完成所需时间超过1/60秒(从计划到完成),那么显然它不是交互式的。如果延迟1/60秒会导致UI问题,那么它就是。在您的程序中,用户交互优先级应该很少。如果这很常见,那么你可能误解了“优先级”的含义。这都是关于什么可以推迟。如果所有东西都是高优先级的,那么什么都不是。记住,主队列无论如何都具有最高优先级,并且是串行的,因此如果您已经调度到主队列,那么这并不重要。这对在非主队列上运行的东西很重要。@RobNapier不,事实上我说过,
userInitiated和userInteractive
(两者)是最快的(速度非常相似),
.background和.default
慢得多(尤其是
.background
——最慢的)。因此,我对
.userInitiated
没有意见,这就引出了一个要点:使用描述您的情况的级别。您的用户请求了一些东西,在您完成处理之前,他们无法真正前进。它不是交互式的,但用户正在等待。这就是
.userInitiated
,它也恰好使用最快的线程
.background
不仅仅是“最慢的”。它还包含许多其他信息,例如,应用程序可能在很长一段时间(数小时或数天)内都可以正常运行,而根本不运行它。它恰好是最慢的,但它甚至可能无法运行,这与低优先级的线程完全不同。文档中描述的非常好: