枚举器
1、枚举器是一种苹果官方推荐的更加面向对象的一种遍历方式,相比于for循环,它具有高度解耦、面向对象、使用方便等优势
2、for in、经典for循环和EnumerateObjectsUsingBlock 的比较:
2.1、对于集合中对象数很多的情况下,for in 的遍历速度非常之快,但小规模的遍历并不明显(还没普通for循环快)
2.2、Value查询index的时候, 面对大量的数组推荐使用 enumerateObjectsWithOptions的并行方法.
2.3、遍历字典类型的时候, 推荐使用enumerateKeysAndObjectsUsingBlock,block版本的字典遍历可以同时取key和value(forin只能取key再手动取value)
//数组枚举
[@[@"1",@"2",@"3",@"1",@"2",@"3",@"1",@"2",@"3",@"100",@"2",@"83",@"1",@"2",@"-3"] enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj integerValue] == 100) {
NSLog(@"===%ld===",idx);
}
}];
//for-in 快速枚举
NSMutableArray * arr = @[@1,@2,@3,@4,@5].mutableCopy;
for (NSNumber *obj in arr) {
// if ([obj integerValue] == 2) {
// [arr addObject:@"6"];
// }
NSLog(@"%@",obj);
}
NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:@"obj1",@"key1",@"obj2",@"key2",@"obj3",@"key3" ,nil];
[dic enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSLog(@"===%@====%@",key,obj);
if ([key isEqualToString:@"key2"]) {
*stop = YES;
}
}];
参考:(https://www.jianshu.com/p/5d4a8be9baf7)
** [https://www.jianshu.com/p/c45f928b0519]