我在使用 dispatch_async 时遇到了一些问题。在我的应用程序主/UI 线程上,我在全局队列上调用 dispatch_async,并告诉它去执行一些具有完成处理程序的函数调用。我期待完成处理程序被调用,但有时似乎不会。
dispatch_queue_t hiq = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_async(hiq, ^(void){
[object doSomethingAndThenCompletionHandler:^(){
//Do some stuff because I'm done
}];
});
有趣的是,每当我在文本字段中输入内容时,我都会这样做以响应 controlTextDidChange。 当我单击文本字段时,所有完成处理程序都会立即触发。
我的猜测是,我所有的完成处理程序都在运行循环中排队,然后当我的 UI 元素失去焦点时,就会释放队列。我没有足够的运行循环专家知道在我输入文本字段或组合框时到底发生了什么,但也许它正在占用运行循环?
编辑:我认为它与运行循环模式有关,因为当我打印出运行循环模式时,它会打印为 NULL,但在完成处理程序中打印为默认模式时除外。我正在使用组合框,并且仅当组合框打开并展开时才会出现问题。 UIScrollView 阻止运行循环? 我认为这可能与这个问题有关。你们有什么感想?