美文网首页
iOS 遍历数组删除引发崩溃问题

iOS 遍历数组删除引发崩溃问题

作者: Singularity_Lee | 来源:发表于2019-06-11 09:34 被阅读0次

    在对旧项目进行新需求更新的时候发现了之前的一个问题,在数组遍历中删除数组中指定某一对象会引发崩溃。

    究其原因是数组遍历的情况下其对象的index不做更新,此时删除某一对象后下次循环的index出错造成数组越界问题从而引发崩溃。

    解决方式使用for循环倒序排列删除即可

    for (NSInteger i=self.viewModel.shopGoods.count-1; i>=0; --i) {
        WGShopCarModel *shopModel=[self.viewModel.shopGoods objectAtIndex:i];
        if (shopModel.goodsList.count==0) {
           [self.viewModel.shopGoods removeObject:shopModel];
        }
    }
    

    但这样从虽然正确了但看着别扭,因此推荐用enumerate方式遍历

    [self.viewModel.shopGoods enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                    
        WGShopCarModel *shopModel=[self.viewModel.shopGoods objectAtIndex:idx];
        if (shopModel.goodsList.count==0) {
            [self.viewModel.shopGoods removeObject:shopModel];
        }
    }];
    

    NSEnumerationReverse 倒序 NSEnumerationConcurrent 正序

    相关文章

      网友评论

          本文标题:iOS 遍历数组删除引发崩溃问题

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