如何确保经常刷新的TableView流畅?

时间:2017-11-13 12:55:22

标签: ios objective-c uitableview

有一个tableView谁每0.5秒刷新一次;

我是tableView reloadDatareloadSections: withRowAnimation:

它们都导致FPS减少

我能为它做些什么?

tableView每0.5秒有一个新数据

需要立即显示新数据

的代码:

- (void)registerTableViewCells {
    [self.tableView registerClass:[UITableViewCell1 class] forCellReuseIdentifier: UITableViewCell1Identifier];
    [self.tableView registerClass:[UITableViewCell2 class] forCellReuseIdentifier: UITableViewCell2Identifier];
    [self.tableView registerClass:[UITableViewCell3 class] forCellReuseIdentifier: UITableViewCell3Identifier];
}

- (void)makeUpDisplaySource {
    NSMutableArray *arrM = [NSMutableArray array];
    [arrM addObject:@[UITableViewCell1Identifier, @(60), @(1)]];
    [arrM addObject:@[UITableViewCell2Identifier, @(55), @(10)]];
    [arrM addObject:@[UITableViewCell3Identifier, @(30), @(10+_fortySeat*30)]];
    // _fortySeat is  boolValue
    self.displaySource = arrM;
}

tableView委托

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSArray *dataArr = self.displaySource[indexPath.section];
    NSString *identifier = dataArr[0];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];
    return cell;
}

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    if ([NSStringFromClass(cell.class) isEqualToString:@"UITableViewCell1"]) {
        UITableViewCell1 *newcell = (UITableViewCell1 *)cell;
        [newcell  updatCellUI];
    }
    else if ([NSStringFromClass(cell.class) isEqualToString:@"UITableViewCell2"]) {
        UITableViewCell2 *newcell = (UITableViewCell2 *)cell;
        [newcell updatCellUIBuy: model1 sell: model2];
    }
    else if ([NSStringFromClass(cell.class) isEqualToString:@"UITableViewCell3"]){
        cell.backgroundColor = GL_CELL_BACKGROUD_COLOR;
        [cell addSubview:self.someView];// someView is a lazy property
    }
}

1 个答案:

答案 0 :(得分:0)

如果您不使用可重复使用的单元格,当然,每0.5秒重新加载一次数据可能会导致FPS问题,因为您将重新加载TableView中存在的所有单元格的数据。

即使您使用reloadSections:重新加载数据,如果要重新加载所有已修改的单元格,也会遇到问题。即使是那些不可见的人。 - 这可能会导致问题。

在这种情况下,我建议你:

  1. 使用:[self.tableView registerNib:[UINib nibWithNibName:@"TableViewCell" bundle:nil] forCellReuseIdentifier:@"CellID"];

    这将在xib文件下注册tableView,并在ID下注册单元格。

  2. cellForRowAtIndexPath:中使用此ID加载您的单元格: UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellID"];

    使用可重复使用的单元格可以提高加载TableView的速度,它可以帮助您刷新它。

  3. 如果您已经在使用可重复使用的细胞,我建议您在问题中让人们知道。 即使您使用可重复使用的单元格,如果您仍然遇到FPS问题,也可以简单地减少2次重新加载之间的间隔时间。

    我可能没有完全理解你的问题,我可能在某些方面有误。当然不要犹豫,让我知道/编辑我的答案,我会贬低它。