gpt4 book ai didi

ios - 在 objective-c 中按顺序执行 block 代码

转载 作者:行者123 更新时间:2023-11-28 19:06:09 25 4
gpt4 key购买 nike

我尝试从服务器加载 UITableView 的数据源,这可能需要几秒钟。我的问题是数据源和 UITableView 内容之间的异步,当然我遇到了异常。

[self loadingDataSource]; //could take few second
[self.tableView reloadData];

以上代码的结果是黑屏。我发现当我在第一个语句中加载数据源时,第二个语句没有等待第一个完成并在加载数据源之前执行。所以我尝试使用GCD来解决

int64_t delayInSeconds = 0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[self loadingDataSource]; //could take few second
[self.tableView reloadData];
});

但是还是不行...

我找到了一些其他的方法,例如,使用Dispatch Semaphores等待Loading DataSource语句完成,然后再执行下一条语句。但我不知道,它是否适合我的情况。

dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

你能帮帮我吗?谢谢。

最佳答案

您可以将完成 block 添加到您的 loadingDataSource 方法。

- (void)viewDidLoad
{
[super viewDidLoad];

[self loadingDataSource:^{
[self.tableView reloadData];
}];
}

- (void)loadingDataSource:(void (^)(void))completion
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Load data source
if (completion)
{
dispatch_async(dispatch_get_main_queue(), completion);
}
});
}

关于ios - 在 objective-c 中按顺序执行 block 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20374370/

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