在reloadData之后,numberOfRowsInSection调用了太多时间

时间:2015-09-01 17:36:09

标签: ios objective-c xcode uitableview

我有一个在表视图中打开所有部分的功能。

非常奇怪,当[self.tvChoices reloadData];被召唤时,我得到了

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 

要为每个部分(1300)调用,而不仅仅是可见部分。

有什么想法吗?

(也许我应该在reloadData之前清理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];  <-- 
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

- 即使是不可见的部分也要调用

1 个答案:

答案 0 :(得分:0)

这种行为很有意义,因为表格视图需要估算滚动指标的大小。要做到这一点,它需要知道表视图中有多少总行,因此需要询问每个部分中有多少行。

如果它不是您应用的重大性能影响,请不要担心。担心一个方法被调用多少次并试图减少它而没有显着的性能提升是严重的过早优化,并且很少值得工作和它导致的错误。

正如一些评论者指出的那样,如果它受到性能影响,您可以查看- reloadRowsAtIndexPaths:withRowAnimation:- reloadSections:withRowAnimation:仅重新加载需要更新的行/部分。