是否有可能使这个“更清晰”或“更好”? 任何解决方案都是受欢迎的,即使我得到了正确的答案。
问题是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
});
}
}
答案 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);
}