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 = [NSMutableArray array];
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,ind:0
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", obj,(unsigned long)idxOut);
46 
47             if (idxOut == 2) {
48                 *stopOut = YES;
49             }
50 
51             [lArr2 enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idxIn, BOOL * _Nonnull stopIn) {
52                 NSLog(@"--%@,ind:%lu", obj,(unsigned long)idxIn);
53                 if (idxIn == 3) {
54                     *stopOut = YES;
55                 }
56             }];
57         }];
58         
59         /** 2019-04-03 01:05:20.987109+0800 块循环最具优势![3020:25596] 0,ind:0
60          2019-04-03 01:05:20.987380+0800 块循环最具优势![3020:25596] --0,ind:0
61          2019-04-03 01:05:20.987427+0800 块循环最具优势![3020:25596] --1,ind:1
62          2019-04-03 01:05:20.987476+0800 块循环最具优势![3020:25596] --2,ind:2
63          2019-04-03 01:05:20.987499+0800 块循环最具优势![3020:25596] --3,ind:3 */
64 //        [lArr1 enumerateObjectsUsingBlock:^(  NSNumber* obj, NSUInteger idxOut, BOOL * _Nonnull stopOut) {
65 //            NSLog(@"%@,ind:%lu", obj,(unsigned long)idxOut);
66 //            
67 //            if (idxOut == 2) {
68 //                *stopOut = YES;
69 //            }
70 //            
71 //            
72 //            [lArr2 enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idxIn, BOOL * _Nonnull stopIn) {
73 //                NSLog(@"--%@,ind:%lu", obj,(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是否操作会决定内循环是否能执行完毕。

转载于:https://www.cnblogs.com/Dast1/p/10646462.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值