ios - 如何在设备上流畅地进行连续的 Action 过程? (GCD)

标签 ios swift keyboard grand-central-dispatch

我正在为 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/

相关文章:

ios - 如何创建 MKCoordinateRegion

sql - 选择sqlite(Swift)中的count(col_name)不起作用

java - 停止键盘输入?

ios - UICollectionView 透明背景

Swift - tableView.reloadData() 不工作,即使它看起来在正确的线程中

安卓软键盘不会消失

iOS iPhone - 在 keyboardWillShow 之前获取 UIKeyboard 高度

ios - 如果用户在登录后更改了他的 facebook 个人资料详细信息,如何在我的应用程序中更新 facebook 个人资料?

ios - 将NSString传递给UInt8 []

ios - 尝试使用点运算符显示来自另一个类的 AppDelegate 中的 NSMutable 数组对象的信息