dispatch_after会阻塞主线程吗?

时间:2015-02-07 13:57:28

标签: ios objective-c multithreading grand-central-dispatch dispatch-async

我正在设置一个计时器,以便在第二次通过后重置键盘扩展名的值。问题是我觉得以下调用阻碍了我的UI:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    [self resetDoubleTapBool];
})

是否存在异步方式,或者更好的方式?谢谢!

2 个答案:

答案 0 :(得分:6)

dispatch_after()调用本身不会阻止。在指定时间(或之后不久),该块将被提交到主队列。提交它不会阻止主线程。当主线程接下来运行其运行循环或在dispatch_main()内空闲时,它将执行该块。

IF 您的-resetDoubleTapBool方法花费了大量时间,这可能会阻碍您的用户界面。这与在主线程上运行的任何代码完全相同。它并非特定于dispatch_after()或GCD的任何其他部分。

答案 1 :(得分:0)

根据function documentation

  

此函数一直等到指定的时间,然后异步地将块添加到指定的队列。