標籤:style blog io color os ar for sp on
//init a NSArray NSMutableArray *arr2 = [NSMutableArray array]; for (int i=0; i<10; ++i) { NSMutableDictionary *d = [NSMutableDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%d", i], @"a", 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, BOOL *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]; } }
PS: 搜一句補充的話
//forin 迴圈中的便利內容不能被改變, 是因為如果改變其便利的內容會少一個, 而系統是不會允許這個發生的所以就會crash...但是當改變最後一個的內容時, 就不會crash, 是因為此時遍曆已經結束, 結束之後對內容做修改是允許的 。
Bug-iOS: Collection <__NSArrayM: 0x> was mutated while being enumerated.