forin循環(huán)中的遍歷之特殊之處

forin 循環(huán)中的遍歷內(nèi)容不能被改變, 是因?yàn)槿绻淖兤浔憷膬?nèi)容會少一個, 而系統(tǒng)是不會允許這個發(fā)生的所以就會crash...但是當(dāng)改變最后一個的內(nèi)容時, 就不會crash, 是因?yàn)榇藭r遍歷已經(jīng)結(jié)束, 結(jié)束之后對內(nèi)容做修改是允許的

//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];  
    }  
}  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.如何追蹤app崩潰率,如何解決線上閃退 當(dāng) iOS設(shè)備上的App應(yīng)用閃退時,操作系統(tǒng)會生成一個crash日志,...
    中婭沙漏閱讀 626評論 0 5
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,228評論 25 708
  • Facebook COO Sandburg的Lean In 一書讓人深思。“公開地討論我的性生活也比討論性別(ge...
    中美邊緣人閱讀 2,182評論 1 4
  • 早上。媽媽載我去學(xué)校。到了學(xué)校我就把作業(yè)拿出來。拿好作業(yè)老師就來了,第一節(jié)上語文課,第二節(jié)上數(shù)學(xué)課,第三節(jié)上語文課...
    胡彬123閱讀 282評論 0 0

友情鏈接更多精彩內(nèi)容