dispatch_after()没有弹出时间

时间:2013-12-18 17:51:02

标签: ios grand-central-dispatch

是否有可能使这个“更清晰”或“更好”? 任何解决方案都是受欢迎的,即使我得到了正确的答案。

问题是dispatch_after(),popTime == 0仍然给主线程一些时间来进行一些UI更改。以下代码有时会从后台线程调用。

-(void)methodCalledFromSomeThread{
    if (delayInSeconds) {
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
            // Updating some UI like
        });
    }else{
        dispatch_async(dispatch_get_main_queue(), ^{
            // Updating some UI like
        });
    }
}

1 个答案:

答案 0 :(得分:3)

主队列上的

dispatch_async也会将代码排队以在下一个runloop上运行,从而为系统提供更新UI的时间。您可以这样检查:

void (^block)() = ^{
        [self.tableView reloadData];
    };

if (delayInSeconds) {
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), block);
}else if([NSThread isMainThread]) {
    block();
}
else {
    dispatch_async(dispatch_get_main_queue(), block);
}
相关问题