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

How can I make a continuous action process smoothly on a device? (GCD)

我正在为 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.
     })
}