OC循环方法推荐-块循环遍历(比for循环好用)

编程之家收集整理的这篇文章主要介绍了OC循环方法推荐-块循环遍历(比for循环好用)编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

搜索热词

最近在看一本书《Effective OC 2.0》,今天看到有个tip是OC适中循环各自优劣性,作者最终推荐此块循环。

阅读时思考了下块循环是否方便实现内部循环终止外部循环的问题。

于是做了如下验证,代码如下:

 1 //
 2 //  main.m
 3   块循环最具优势!
 4  5   Created by LongMa on 2019/4/3.
 6   Copyright © 2019年. All rights reserved.
 7 //
 8 
 9 #import <Foundation/Foundation.h>
10 
11 int main(int argc,const char * argv[]) {
12     @autoreleasepool {
13         NSMutableArray *lArr1 = [NSMutableArray array];
14         NSMutableArray *lArr2 =15         for (int i = 0; i < 10; ++i) {
16             [lArr1 addObject:@(i)];
17             [lArr2 addObject:@(i)];
18         }
19         
20         反向遍历
21                 [lArr1 enumerateObjectsWithOptions:(NSEnumerationReverse)
22                                         usingBlock:^(  NSNumber* obj,NSUInteger idx,BOOL * _Nonnull stop) {
23                                             NSLog(@"%@,ind:%lu",obj,(unsigned long)idx);
24                                             if (idx == 90) {
25                                                 *stop = YES;
26                                             }
27                 }];
28         
29         
30         思考:里循环能否终止外循环?
31         A:可以实现!需要差异化小标和停止参数,然后在里层循环对外循环的stopOut进行操作!此时,对内循环stopIn是否操作会决定内循环是否能执行完毕。
32         
33         /** 2019-04-03 01:08:30.003134+0800 块循环最具优势![3176:27943] 0,ind:0
34          2019-04-03 01:08:30.004040+0800 块循环最具优势![3176:27943] --0,1)">35          2019-04-03 01:08:30.004143+0800 块循环最具优势![3176:27943] --1,ind:1
36          2019-04-03 01:08:30.004679+0800 块循环最具优势![3176:27943] --2,ind:2
37          2019-04-03 01:08:30.004756+0800 块循环最具优势![3176:27943] --3,ind:3
38          2019-04-03 01:08:30.004819+0800 块循环最具优势![3176:27943] --4,ind:4
39          2019-04-03 01:08:30.004881+0800 块循环最具优势![3176:27943] --5,ind:5
40          2019-04-03 01:08:30.004914+0800 块循环最具优势![3176:27943] --6,ind:6
41          2019-04-03 01:08:30.004945+0800 块循环最具优势![3176:27943] --7,ind:7
42          2019-04-03 01:08:30.005036+0800 块循环最具优势![3176:27943] --8,ind:8
43          2019-04-03 01:08:30.005072+0800 块循环最具优势![3176:27943] --9,ind:9 */
44         [lArr1 enumerateObjectsUsingBlock:^(  NSNumber* obj,NSUInteger idxOut,BOOL * _Nonnull stopOut) {
45             NSLog(@"%@,ind:%lu",(unsigned long)idxOut);
46 
47             if (idxOut == 2) {
48                 *stopOut = YES;
49             }
50 
51             [lArr2 enumerateObjectsUsingBlock:^(id  _Nonnull obj,NSUInteger idxIn,1)"> _Nonnull stopIn) {
52                 NSLog(--%@,1)">)idxIn);
53                 if (idxIn == 354                     *stopOut =55                 }
56             }];
57 58         
59         * 2019-04-03 01:05:20.987109+0800 块循环最具优势![3020:25596] 0,1)">60          2019-04-03 01:05:20.987380+0800 块循环最具优势![3020:25596] --0,1)">61          2019-04-03 01:05:20.987427+0800 块循环最具优势![3020:25596] --1,1)">62          2019-04-03 01:05:20.987476+0800 块循环最具优势![3020:25596] --2,1)">63          2019-04-03 01:05:20.987499+0800 块循环最具优势![3020:25596] --3,ind:3 64         [lArr1 enumerateObjectsUsingBlock:^(  NSNumber* obj,BOOL * _Nonnull stopOut) {
65             NSLog(@"%@,(unsigned long)idxOut);
66 //            
67             if (idxOut == 2) {
68                 *stopOut = YES;
69 70 71 72             [lArr2 enumerateObjectsUsingBlock:^(id  _Nonnull obj,BOOL * _Nonnull stopIn) {
73                 NSLog(@"--%@,(unsigned long)idxIn);
74                 if (idxIn == 3) {
75                     *stopIn = YES;
76                     *stopOut = YES;
77 78 79 80         }];
81         
82         
83     }
84     return 0;
85 }

 

运行上面代码可见:

可以实现!需要差异化小标和停止参数,然后在里层循环对外循环的stopOut进行操作!此时,对内循环stopIn是否操作会决定内循环是否能执行完毕。

总结

以上是编程之家为你收集整理的OC循环方法推荐-块循环遍历(比for循环好用)全部内容,希望文章能够帮你解决OC循环方法推荐-块循环遍历(比for循环好用)所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢寻找一群志同道合、互帮互助的学习伙伴,可以点击下方链接加入:
编程之家官方1群:1065694478(已满)
编程之家官方2群:163560250(已满)
编程之家官方3群:312128206(已满)
编程之家官方4群:230427597

相关文章

猜你在找的iOS相关文章

背景 前端时间产品经理决定使用百度统计,使得 工程B 中原统计sdk-友盟统计,需要被去除。之前尝试去除过一次,但是因有些错误不知如何解决,暂且注释了功能代码,友盟sdk暂时保留了下来。 最近迭代暂缓
结论: alloc负责分配内存和创建对象对应的isa指针; init只是返回alloc生成的对象。 所以alloc后,多次调用init,返回的对象是同一个! 代码如下: 1 // 2 // main.
最近在看一本书《Effective OC 2.0》,今天看到有个tip是OC适中循环各自优劣性,作者最终推荐此块循环。 阅读时思考了下块循环是否方便实现内部循环终止外部循环的问题。 于是做了如下验证,
// // ViewController.m // paintCodeTestOC //gif // Created by LongMa on 2019/7/25. // #import &amp;q
起因 项目中双层for循环时,想当然的认为内部局部指针变量的变化会影响外面数组中模型的地址。结果调试后发现,是不对的。 - (void)pmy_updateCachedArr:(NSArray&amp
起因 用户群反馈app可能请求了不合适的定位权限:始终定位。 看到这个截图,根据经验判断可能是后台定位功能导致可能不得不请求始终定位权限。再加上之前提交审核时,苹果要求在plist文件中新增NSLoc
参考资料: https://www.jianshu.com/p/734341f7c242 https://www.jianshu.com/p/55038871e7de 两天时间探索,期间不知道遇到了多
iOS墨卡托和GPS坐标计算距离时误差测试,测试结果: 墨卡托和gps坐标来回转换没有误差。 墨卡托坐标计算出的距离比gps坐标计算出的距离大,100/92*100 = 108米,每100米多算出8米
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注