您的位置:首页 > 移动开发 > IOS开发

ios 遍历方式

2016-03-24 10:33 423 查看
在开发的过程中,我们经常对数组,字典,以及一些其他的集合进行遍历,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]);
});
}


以上几种遍历方式,各自都有优缺点,大家在开发的过程中,根据需求择优选择,希望对大家有所帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: