ios 遍历方式

来源:互联网 发布:js 声明json 编辑:程序博客网 时间:2024/06/15 05:36


在开发的过程中,我们经常对数组,字典,以及一些其他的集合进行遍历,ios也给我们提供各种各样的遍历方式,现在我就简单列几种遍历方式

/** *  使用 NSEnumerator 遍历 */- (void)test1{  NSArray *arrayM = @[@"A",@"B",@"C",@"D",@"E"];  NSEnumerator *arrayEmt = [arrayM objectEnumerator];  NSString *obj;  while ((obj = [arrayEmt nextObject]) != nil) {    NSLog(@"obj-----%@-----",obj);  }      NSSet *setM = [[NSSet alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];  NSEnumerator *setEmt = [setM objectEnumerator];  NSString *setObj;    while ((setObj = [setEmt nextObject]) != nil) {    NSLog(@"setObj------%@------",setObj);  }      // 反向遍历  NSArray *arrayM1 = @[@"1",@"2",@"3",@"4",@"5"];  NSEnumerator *am = [arrayM1 reverseObjectEnumerator];  NSString *obj1;    while ((obj1 = [am nextObject])!=nil) {    NSLog(@"obj1------%@------",obj1);  }}/** *  基于BLock的遍历方法 */- (void)block{  NSArray *am = @[@"A",@"B",@"C",@"D",@"E"];    [am enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {        NSLog(@"all-----%@------",obj);    if ([obj isEqualToString:@"3"]) {      *stop = YES;    }  }];      // 反向编译  [am enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {    NSLog(@"-------%@-----",obj);  }];}/** *  使用GCD的dispatch_apply函数,一般用于处理耗时较长,迭代次数较多的情况 */- (void)GCD{  NSArray *am = @[@"1",@"2",@"3",@"4",@"5"];    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);    dispatch_apply(am.count, queue, ^(size_t index) {        NSLog(@"-------%@-----%@",am[index],[NSThread currentThread]);  });}

以上几种遍历方式,各自都有优缺点,大家在开发的过程中,根据需求择优选择,希望对大家有所帮助

0 0