asyncAfter没有时间似乎延迟 - 斯威夫特

时间:2018-06-01 11:37:34

标签: ios swift grand-central-dispatch dispatch-async

最终我在swift中使用了asyncAfter功能,没有时间,并且它有一些延迟,看起来与普通代码不同。

使用异步代码:

DispatchQueue.main.asyncAfter(deadline: .now() + 0.0 , execute: {
    self.updateUI()
})

普通代码:

self.updateUI()

执行选择器也有类似的问题。

self.performSelector("onFlip", withObject: nil, afterDelay: 0)

是否因为创建新线程而导致延迟?

2 个答案:

答案 0 :(得分:1)

这是预期的。

DispatchQueue.main.asyncAfter(deadline: .now() + 0.0 , execute: {
    self.updateUI()
})

基本相同
DispatchQueue.main.async {
    self.updateUI()
}

由于您将代码分派到主线程异步,因此也不会立即执行。由于异步调度,闭包内的代码不会立即执行,只能在main的下一个runloop上执行,这可能会导致可测量的延迟。

答案 1 :(得分:1)

Team1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { team_name1=(String) parent.getItemAtPosition(position); getLoaderManager().initLoader(LOADER_TEAM1_ICON,null,AddFixture.this); } @Override public void onNothingSelected(AdapterView<?> parent) { team_name1 = null; } }); 没有创建新线程,因为您要在主队列上调度,主队列将使用主线程,但它也不会立即执行调度的代码。

您已经提交了一个代码块以在主队列上运行,因此在runloop执行该代码之前会经过一段时间;特别是如果在主线程上调用asyncAfter