iOS开发中遍历方式 (有借鉴)
2016-06-24 17:56
344 查看
统一使用:NSArray *array= @[@"1",@"2",@"3"];
1 for循环 可反向遍历
常用地方:遍历字典、数组、集合
NSInteger arrayCount = [array
count];
for (int i =
0; i<arrayCount; i++) {
NSString *obj = arrayM[i];
NSLog(@"%@",obj);
}
优点:简单
缺点: 因为在字典和集合内部是无序排序,所以在遍历的时候需要用到一个新的数组当做中介,增加了开销。
特点:1.只有满足条件 循环才会执行 2.死循环会一直执行下去,除非强制退出 3.碰到continue则跳出本次循环,继续下一次判断,条件成立执行循环
4.碰到break无论条件是否满足,循环立刻结束 5.continue和break跳出的都是当前所在的循环作用域,如果外层有循环不受影响
2 NSEnumerator 遍历 可反向遍历
常用地方:类似for循环
NSEnumerator *arrayEnumerator = [array
objectEnumerator];
NSString *obj;
while ((obj = [arrayEnumerator
nextObject]) != nil) {
NSLog(@"%@",obj); }
优点:对于不同的数据类型,遍历的语法相似;内部可以简单的通过reverseObjectEnumerator设置进行反向遍历
缺点:代码量稍大
3 for .... in循环快速遍历 可反向遍历
常用地方:和for循环类似
for (id object in array){
Nslog{}
}
优点:1语法简洁 2效率最高
缺点:无法取得当前遍历操作所针对的下标
注意点 :for in快速枚举
4基于block的遍历方式
可反向遍历
[array
enumerateObjectsUsingBlock:^(id
_Nonnull
obj, NSUInteger
idx, BOOL
* _Nonnull
stop)
NSLog(@"");
}];
优点:1 遍历时可以直接从block中获得需要的所有信息,包括下标、值等。特别相对于字典而言,不需要做多余的编码即可同时获得key和value的值。 2能够直接修改block中key或者obj的类型为真实类型,可以省去类型转换的工作。 3可以通过NSEnumerationConcurrent枚举值开启并发迭代功能。
说明:基于Block的遍历方式在实现反向遍历的时候也非常简单,使用enumerateObjectsWithOptions方法,传递NSEnumerationReverse作为参数即可,在处理遍历操作的时候推荐基于Block的遍历方式。
5 使用GCD中的dispatch_apply函数
dispatch_queue_t queue =
dispatch_get_global_queue(0,
0);
dispatch_apply(array.count, queue, ^(size_t index) {
NSLog(@"%@--%@",array[index],[NSThread
currentThread]);
});
优点:开启多线程并发处理遍历任务,执行效率高。
缺点:1对于字典和集合需要借助数组 2 无法反向遍历
1 for循环 可反向遍历
常用地方:遍历字典、数组、集合
NSInteger arrayCount = [array
count];
for (int i =
0; i<arrayCount; i++) {
NSString *obj = arrayM[i];
NSLog(@"%@",obj);
}
优点:简单
缺点: 因为在字典和集合内部是无序排序,所以在遍历的时候需要用到一个新的数组当做中介,增加了开销。
特点:1.只有满足条件 循环才会执行 2.死循环会一直执行下去,除非强制退出 3.碰到continue则跳出本次循环,继续下一次判断,条件成立执行循环
4.碰到break无论条件是否满足,循环立刻结束 5.continue和break跳出的都是当前所在的循环作用域,如果外层有循环不受影响
2 NSEnumerator 遍历 可反向遍历
常用地方:类似for循环
NSEnumerator *arrayEnumerator = [array
objectEnumerator];
NSString *obj;
while ((obj = [arrayEnumerator
nextObject]) != nil) {
NSLog(@"%@",obj); }
优点:对于不同的数据类型,遍历的语法相似;内部可以简单的通过reverseObjectEnumerator设置进行反向遍历
缺点:代码量稍大
3 for .... in循环快速遍历 可反向遍历
常用地方:和for循环类似
for (id object in array){
Nslog{}
}
优点:1语法简洁 2效率最高
缺点:无法取得当前遍历操作所针对的下标
注意点 :for in快速枚举
NSMutableArray这类可变对象时要注意不能对容器进行修改,否则会导致遍历器抛出异常导致程序崩溃。
4基于block的遍历方式
可反向遍历
[array
enumerateObjectsUsingBlock:^(id
_Nonnull
obj, NSUInteger
idx, BOOL
* _Nonnull
stop)
NSLog(@"");
}];
优点:1 遍历时可以直接从block中获得需要的所有信息,包括下标、值等。特别相对于字典而言,不需要做多余的编码即可同时获得key和value的值。 2能够直接修改block中key或者obj的类型为真实类型,可以省去类型转换的工作。 3可以通过NSEnumerationConcurrent枚举值开启并发迭代功能。
说明:基于Block的遍历方式在实现反向遍历的时候也非常简单,使用enumerateObjectsWithOptions方法,传递NSEnumerationReverse作为参数即可,在处理遍历操作的时候推荐基于Block的遍历方式。
5 使用GCD中的dispatch_apply函数
dispatch_queue_t queue =
dispatch_get_global_queue(0,
0);
dispatch_apply(array.count, queue, ^(size_t index) {
NSLog(@"%@--%@",array[index],[NSThread
currentThread]);
});
优点:开启多线程并发处理遍历任务,执行效率高。
缺点:1对于字典和集合需要借助数组 2 无法反向遍历
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用开发中AFNetworking库的常用HTTP操作方法小结
- iOS应用中UISearchDisplayController搜索效果的用法
- iOS App开发中的UISegmentedControl分段组件用法总结
- IOS开发环境windows化攻略
- iOS应用中UITableView左滑自定义选项及批量删除的实现
- iOS中UIAlertView警告框组件的使用教程
- 浅析iOS应用开发中线程间的通信与线程安全问题
- iOS中的UIKeyboard键盘视图使用方法小结
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法