我正在为 iOS 制作一个第三方键盘,没有自动更正功能,一切都运行顺畅,尤其是在 iPhone 5 和 4s 等旧设备上。不幸的是,一旦我重新启用自动更正,该过程就会在上述设备上开始滞后。我怎样才能避免这种情况?
我如何设置自动更正
每次用户按下一个键时,输入的单词都会通过一个函数运行,a) 尝试完成单词 b) 尝试更正单词。完成和存储的单词存储在一个数组中,每个数组的第一个元素设置为建议栏中标签的文本。
这个过程本身非常快,结果几乎是即时记录的,但是快速输入是麻烦的开始。
我的想法
我应该使用哪种 GCD 方法来加快速度? dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE)
和 dispatch_async(dispatch_get_global_queue(QOS_CLASS_UTILITY)
似乎是不错的候选者,但我从未使用过 GCD,希望得到其他人的意见。另外,有没有加速这个过程的其他方法?其他第三方键盘似乎没有这个问题,所以我可能做错了什么:(
提前致谢!
最佳答案
您绝对是在正确的轨道上。您不应在与用户交互的同一线程中运行要提出建议的代码,因为这会阻塞主线程。
因此,我会调用 dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE)
来完成您的所有分析。请记住,当您更新键盘上的标签时,您必须返回到主队列。 .例如。
dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.value), 0)) {
//do all of your code that you need to get the values for the labels.
dispatch_async(dispatch_get_main_queue(),{
//update the labels with the value you got.
})
}
关于ios - 如何在设备上流畅地进行连续的 Action 过程? (GCD),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33308800/