Ios numberOfRowsInSection在重新加载数据后调用的次数过多

Ios numberOfRowsInSection在重新加载数据后调用的次数过多,ios,objective-c,xcode,uitableview,Ios,Objective C,Xcode,Uitableview,我有一个打开表视图中所有部分的函数 非常奇怪,当[self.tvChoices重新加载数据]被调用,我得到 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 每个部分(1300)都需要调用,而不仅仅是可视部分 有什么想法吗 (也许我应该在重新加载数据之前清理tableview,但我很好奇为什么会出现这种行为 -(IBAction)multipleTap:(UIGe

我有一个打开表视图中所有部分的函数

非常奇怪,当
[self.tvChoices重新加载数据]被调用,我得到

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
每个部分(1300)都需要调用,而不仅仅是可视部分

有什么想法吗

(也许我应该在重新加载数据之前清理tableview,但我很好奇为什么会出现这种行为

-(IBAction)multipleTap:(UIGestureRecognizer *)sender {
    NSLog(@"--[%s:%d]",__PRETTY_FUNCTION__,__LINE__);
    NSNumber *value=self.mybooleans[sender.view.tag];
    [self reset_Sections_BooleansTo:@(!value.boolValue)];
    [self.tvChoices reloadData];  <-- 
}

--即使对于不可见部分调用此行为也是有意义的,因为表视图需要估计滚动指示器的大小。为此,它需要知道表视图中总共有多少行,因此需要询问每个部分中有多少行

如果它对你的应用程序的性能影响不大,那就不用担心了。担心一个方法被调用了多少次,并试图减少它而没有显著的性能提升,这是严重的过早优化,很少值得去做它所导致的工作和bug


如一些评论人士所指出的,如果它是一个性能上的成功,您可以查看
-reloadRowsAtIndexPaths:withRowAnimation:
-reloadSections:withRowAnimation:
,以仅重新加载需要更新的行/节。

您是否尝试过使用UITableView.reloadSections(\uU:withRowAnimation:)相反?我可以试试。但不酷的是,我必须管理witch部分需要更新。(操作“打开”每个部分的内容,因此,当部分关闭时,我只看到标题,当我打开所有部分时,可能只会显示第一部分(另一部分不需要重新加载)你确定它调用的是1300而不是无限循环吗?你可以通过调试器来检查。很有趣。我会看一看。但是没有意义,因为在中最终显示了标题和单元格…并且只有第一节\6节的第一个单元格可见。那么为什么它可以作为NumberOfRowsInSection中的节通过值1300我确认这一点,即使在viewdidload中,调用[self.tvChoices reloadData];也会使tableview为每个部分调用numberOfRowsInSection(即使是不可见的部分)。问题是我有2400个部分,这需要时间,太多时间。有什么想法吗?(基于这个事实,你认为我应该创建一个新的stackoverflow问题吗?)
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{