有一个tableView谁每0.5秒刷新一次;
我是tableView reloadData
或reloadSections: 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;
}
- (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
}
}
答案 0 :(得分:0)
如果您不使用可重复使用的单元格,当然,每0.5秒重新加载一次数据可能会导致FPS问题,因为您将重新加载TableView中存在的所有单元格的数据。
即使您使用reloadSections:
重新加载数据,如果要重新加载所有已修改的单元格,也会遇到问题。即使是那些不可见的人。 - 这可能会导致问题。
在这种情况下,我建议你:
使用:[self.tableView registerNib:[UINib nibWithNibName:@"TableViewCell" bundle:nil] forCellReuseIdentifier:@"CellID"];
这将在xib文件下注册tableView,并在ID下注册单元格。
在cellForRowAtIndexPath:
中使用此ID加载您的单元格:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellID"];
使用可重复使用的单元格可以提高加载TableView的速度,它可以帮助您刷新它。
如果您已经在使用可重复使用的细胞,我建议您在问题中让人们知道。 即使您使用可重复使用的单元格,如果您仍然遇到FPS问题,也可以简单地减少2次重新加载之间的间隔时间。
我可能没有完全理解你的问题,我可能在某些方面有误。当然不要犹豫,让我知道/编辑我的答案,我会贬低它。