forin循环中的遍历之特殊之处

forin 循环中的遍历内容不能被改变, 是因为如果改变其便利的内容会少一个, 而系统是不会允许这个发生的所以就会crash...但是当改变最后一个的内容时, 就不会crash, 是因为此时遍历已经结束, 结束之后对内容做修改是允许的

//init a NSArray  
NSMutableArray *arr2 = [NSMutableArray array];  
for (int i=0; i<10; ++i) {  
    NSMutableDictionary *d = [NSMutableDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%d", i], @"a", nil nil];  
    [arr2 addObject:d];  
}  
  
//Wrong  
for (NSMutableDictionary *s in arr2) {  
    if ([s[@"a"] isEqualToString:@"3"]) {  
        [arr2 removeObject:s]; //while here is safe for s[@"a"] = @"eeee";  
    }  
}  
  
  
//Safe 1.  
[arr2 enumerateObjectsUsingBlock:^(NSMutableDictionary *obj, NSUInteger idx, BOOLBOOL *stop) {  
    if ([obj[@"a"] isEqualToString:@"3"]) {  
        *stop = YES;  
        [arr2 removeObject:obj]; // or obj[@"a"] = @"4ewewewe";  
    }  
}];  
  
//Safe 2.  
NSArray *tmp = [NSArray arrayWithArray:arr2];  
for (NSMutableDictionary *s in tmp) {  
    if ([s[@"a"] isEqualToString:@"3"]) {  
        s[@"a"] = @"eeee";  
        [arr2 removeObject:s];  
    }  
}  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.如何追踪app崩溃率,如何解决线上闪退 当 iOS设备上的App应用闪退时,操作系统会生成一个crash日志,...
    中娅沙漏阅读 3,652评论 0 5
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,907评论 25 709
  • Facebook COO Sandburg的Lean In 一书让人深思。“公开地讨论我的性生活也比讨论性别(ge...
    中美边缘人阅读 6,392评论 1 4
  • 早上。妈妈载我去学校。到了学校我就把作业拿出来。拿好作业老师就来了,第一节上语文课,第二节上数学课,第三节上语文课...
    胡彬123阅读 1,733评论 0 0

友情链接更多精彩内容