iOS开发

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];
}

这样就不会出现问题了

养成一个好的代码习惯很重要,我还在努力中

上一篇下一篇

猜你喜欢

热点阅读