最终我在swift中使用了asyncAfter功能,没有时间,并且它有一些延迟,看起来与普通代码不同。
使用异步代码:
DispatchQueue.main.asyncAfter(deadline: .now() + 0.0 , execute: {
self.updateUI()
})
普通代码:
self.updateUI()
执行选择器也有类似的问题。
self.performSelector("onFlip", withObject: nil, afterDelay: 0)
是否因为创建新线程而导致延迟?
答案 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
。