0

我正在开发一个 iOS RSS 阅读器应用程序。我的应用程序实现了一个带有自定义部分标题的 UITableView:

    UINib *sectionHeaderNib = [UINib nibWithNibName:@"HeadlineView" bundle:nil];
[self.newsTable registerNib:sectionHeaderNib forHeaderFooterViewReuseIdentifier:SectionHeaderViewIdentifier];

每个部分标题都用于显示文章标题。我可以选择在“已经看过”的文章和新文章之间进行切换。每次在选项之间切换时,表视图数据数组都会更改,因此我需要调用 UITableView ReloadData:

[self.newsTable performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];

当我调用此方法时,加载需要超过 1 秒(这似乎卡住了),因为它重新加载所有节标题而不是使用出队的节标题。当我只是滚动表格视图时,一切正常,出队工作正常。

每次我初始化一个节标题时,我都会设置 3 个手势识别器,这需要很长时间。但如果节标题出列,则手势识别器已经设置,因此速度很快。

这是出队代码:

NowsHeadlineHeaderView *sectionHeaderView = [self.newsTable dequeueReusableHeaderFooterViewWithIdentifier:SectionHeaderViewIdentifier];

我没有在单元格/部分加载中执行任何其他耗时的任务。

为什么当我使用 reloadData 时 tableview 一遍又一遍地初始化节标题,我该如何解决这个问题,这样它会更快

4

1 回答 1

0

强制调用reloadData将清除出列单元格/标题/等上的石板。从文档中

调用此方法 ( reloadData) 以重新加载用于构建表格的所有数据,包括单元格、节页眉和页脚、索引数组等。为了提高效率,表格视图只重新显示那些可见的行。如果表因重新加载而缩小,它会调整偏移量。

如果您正在做的是添加或减去单元格或部分,请尝试使用insertRowsAtIndexPaths:withRowAnimation:anddeleteRowsAtIndexPaths:withRowAnimation:代替。

我还怀疑您的NowsHeadlineHeaderView设置效率低下,您可能需要调查一下。

于 2013-09-06T14:56:59.603 回答