我有一个带有文本字段的视图,用户将使用数字键盘输入整数。
用户然后单击按钮进行计算。
计算是CPU密集型的,根据输入需要几秒或更长时间才能完成。
如果我在代码运行之前尝试解除键盘,它就不会被解雇 - 代码运行在第1位。 (以下示例代码)
键盘解雇是否需要此代码的后台线程?
@IBOutlet weak var numberField: UITextField!
@IBAction func runCPUIntensiveCode(_ sender: UIButton) {
numberField.resignFirstResponder()
runCode()
}
答案 0 :(得分:2)
我认为你有DispatchQueue
的几个解决方案:
1. [我推荐这个]通过global background queues之一
@IBAction func runCPUIntensiveCode(_ sender: UIButton) {
numberField.resignFirstResponder()
DispatchQueue.global(.userInitiated).async{
runCode()
DispatchQueue.main.async{
<notify UI about completion>
}
}
2。以小延迟开始计算。有时动画子系统需要免费的主线程来安排动画:
@IBAction func runCPUIntensiveCode(_ sender: UIButton) {
numberField.resignFirstResponder()
DispatchQueue.main. asyncAfter(DispatchWallTime.distantFuture){
runCode()
<notify UI about completion>
}
}