美文网首页iOS开发
iOS TableView 频繁刷新 闪退,可能是这个原因

iOS TableView 频繁刷新 闪退,可能是这个原因

作者: BlackStar暗星 | 来源:发表于2020-10-29 11:36 被阅读0次

    问题:使用 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];
    }
    

    这样就不会出现问题了

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

    相关文章

      网友评论

        本文标题:iOS TableView 频繁刷新 闪退,可能是这个原因

        本文链接:https://www.haomeiwen.com/subject/pgdpmktx.html