iOS TableView 频繁刷新 闪退,可能是这个原因
2020-10-29 本文已影响0人
BlackStar暗星
问题:使用 NSMutableArray 作为 TableView 的 dataSource 后,频繁下拉刷新可能会导致数组越界
原因:
在数据有变更的时候,我们会可能会这么操作
-(void)refreshTableView{
[self.mutArr removeAllObjects];
for (int i = 0; i<xxx.count; i++) {
[self.mutArr addObject:xxx[i]];
}
[self.tableView reloadData];
}
这样写是有问题的
因为我们如果频繁刷新 tableView
,也就是多次执行 refreshTableView
,那么可能会出现,第一次的[self.tableView reloadData]
没有刷新完成,但是第二次的 refreshTableView
已经执行了[self.mutArr removeAllObjects]
,这就导致了 cellForRow
里边调用 self.mutArr[indexPath.row]
的时候 self.mutArr
其实是空的,出现越界现象
解决办法
知道了问题,那么就很好解决了,把可变数组改成数组即可,或者使用临时数组取添加数据
-(void)refreshTableView{
NSMutableArray *tempArr = [NSMutableArray array]
for (int i = 0; i<xxx.count; i++) {
[tempArr addObject:xxx[i]];
}
[self.mutArr removeAllObjects];
[self.mutArr addObjectsFromArray:tempArr]
[self.tableView reloadData];
}
这样就不会出现问题了
养成一个好的代码习惯很重要,我还在努力中