gpt4 book ai didi

iOS UIView 没有立即更新

转载 作者:行者123 更新时间:2023-11-29 11:57:34 25 4
gpt4 key购买 nike

当我从主线程更新 UI 时,它们似乎不会立即生效。也就是说,更改不会立即显示在屏幕上。

这是我正在运行的代码的简化版本:

- (void) do_ui_update {
// UI update here that does not appear immediately
}

- (void) some_time_consuming_function {
// line 1
// line 2
// ...
// line n
}

- (void) function_that_runs_in_main_thread {
[self RUN_ON_UI_THREAD:^{
[self do_ui_update];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self some_time_consuming_function];
});
}];
}

- (void) RUN_ON_UI_THREAD:(dispatch_block_t)block
{
if ([NSThread isMainThread])
block();
else
dispatch_sync(dispatch_get_main_queue(), block);
}

当我在 some_time_consuming_function 中的每一行调试设置断点时,有时当调试器到达第 2 行时,UI 更新出现在屏幕上,有时是第 3 行,依此类推。

所以我的问题是:如何在到达 some_time_consuming_function 的第一行之前让 UI 更新出现在屏幕上?

最佳答案

将后台调度调度到下一个主循环迭代:

-(void) function_that_runs_in_main_thread {
[self do_ui_update];

dispatch_async(dispatch_get_main_queue(), ^{
// All pending UI updates are now completed
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self some_time_consuming_function];
});
});
}

关于iOS UIView 没有立即更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38354731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com