• 关于数组在遍历过程中修改问题


    问题描述:当我们需要通过遍历数组过滤的时候,一般会考虑以下写法,这种写法 会引起crash

    *** Collection <__NSArrayM: 0x7fddedfca720> was mutated while being enumerated.

     

     1 NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithObjects:@"1",@"1",@"2",@"1",@"1",@"1",@"1",@"1",@"1",@"1", nil];
     2 
     3     for (NSString *numStr in mutableArray) {
     4 
     5         if ([numStr isEqualToString:@"2"]) {
     6 
     7             [mutableArray removeObject:numStr];
     8 
     9         }
    10 
    11     }

    问题解决:可以使用 方法  

    - (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block NS_AVAILABLE(10_6, 4_0);

    来避免这个crash

    [mutableArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    
            if ([obj isEqualToString:@"2"]) {
    
                [mutableArray removeObject:obj];
    
            }
    
        }];

    还可以拷贝一份数组来操作如:

    1 NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithObjects:@"1",@"1",@"2",@"1",@"1",@"1",@"1",@"1",@"1",@"1", nil];
    2     NSArray *array = [NSArray arrayWithArray:mutableArray];
    3     for (NSString *numStr in array) {
    4         if ([numStr isEqualToString:@"2"]) {
    5             [mutableArray removeObject:mutableArray];
    6         }
    7     }

     

  • 相关阅读:
    学习Linux shell脚本中连接字符串的方法
    使用 ffmpeg 转换视频格式
    一点不懂到小白的linux系统运维经历分享
    linux利用scp远程上传下载文件/文件夹
    angular ui-select
    JavaScript sort()方法
    js性能优化
    layer弹出层
    JS复制对象
    某天修改了啥bat批处理
  • 原文地址:https://www.cnblogs.com/mumoozhu/p/4545963.html
Copyright © 2020-2023  润新知