gpt4 book ai didi

ios - 具有多个部分的 UITableView 负载不稳定

转载 作者:行者123 更新时间:2023-11-28 22:00:59 24 4
gpt4 key购买 nike

我有一个包含多个部分的 UITableView (TV),每个部分都有一个 NSArray 作为数据源(没有 CoreData,没有图像)。当用户打开电视时,我的应用会进行一些密集计算以生成数据源数组。在某些情况下,计算可能需要一些时间,然后会发生先显示节标题,然后显示单元格的情况,我认为这不太好。

我已经在使用 GCD 进行计算了:

- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear: animated];

[MBProgressHUD showHUDForView: self.view animated: YES];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
[self.model generateData];

dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView: self.view animated: YES];

[self.tableView reloadData];
});
});
}

除了尝试优化计算之外,我还能做些什么来使它看起来更平滑吗?例如,有没有办法让节标题在计算完成之前不出现?

更新:

所以最后,我的解决方案竟然有所不同。为了生成我的数据,我现在使用 dispatch_group,并为 dispatch_group_async block 中的每个部分计算 NSArray,以便它们同时运行。这已经是速度上的提升了。此外,我已经在用户打开电视的 UIViewController 中开始计算。因此,当电视打开时,数据几乎立即可用,并且所有部分都能顺利加载。

这里是完整的代码片段:

dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) ^{
[self.model generateArray1];
});

dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) ^{
[self.model generateArray2];
});

//... etc for each section

// make sure that everything is done before moving on

dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

最佳答案

如果您从 tableView:titleForHeaderInSection: 返回 nil,那么标题将不会显示,因此添加少量条件逻辑来检查数据是否已加载yet 并返回 nil(如果未加载)或部分标题(如果已加载)。

关于ios - 具有多个部分的 UITableView 负载不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25107638/

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