Objective c Cocoa:中断主线程以检查新的键事件?
我有一个带有搜索字段的基本Cocoa应用程序。当用户键入第一个字母时,将启动一个可能需要一段时间的搜索 用户键入第二个字母后,应立即取消第一次搜索,并使用新的搜索字符串开始搜索 搜索本身必须发生在主线程上 有没有办法定期“暂停”主线程上运行的搜索任务,并让主线程处理任何挂起的关键事件 我尝试添加以下内容,但效果不太好。光标会闪烁,但键入的新字母不会显示Objective c Cocoa:中断主线程以检查新的键事件?,objective-c,multithreading,cocoa,Objective C,Multithreading,Cocoa,我有一个带有搜索字段的基本Cocoa应用程序。当用户键入第一个字母时,将启动一个可能需要一段时间的搜索 用户键入第二个字母后,应立即取消第一次搜索,并使用新的搜索字符串开始搜索 搜索本身必须发生在主线程上 有没有办法定期“暂停”主线程上运行的搜索任务,并让主线程处理任何挂起的关键事件 我尝试添加以下内容,但效果不太好。光标会闪烁,但键入的新字母不会显示 let untilDate = NSDate(timeIntervalSinceNow: 0.25) while NSRunLoop.curre
let untilDate = NSDate(timeIntervalSinceNow: 0.25)
while NSRunLoop.currentRunLoop().runMode(NSEventTrackingRunLoopMode, beforeDate: untilDate)
{
print("did process")
}
PS:另一种解决方案是在第一个字母后再搜索一小段时间,看看用户是否会输入更多。但是,如果有一种方法可以完成上述任务,搜索将更快完成。为什么需要在主线程上进行搜索?如果这需要时间,就不应该在主线程上执行!是的,我知道。但是搜索是在访问UI元素,而且必须在主线程上完成,很遗憾,那么你的方法肯定是非常失败的,我很抱歉。您应该将数据和UI元素分开。手动处理主运行循环是个坏主意,它只会导致更多问题和低性能应用程序。我正在遍历UI元素树,这些元素只能从主线程访问。我只是想知道是否有这样一种方法,即在让主线程进程排队等待事件时暂停执行。