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

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

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

 //
// main.m
// 块循环最具优势!
//
// Created by LongMa on 2019/4/3.
// Copyright © 2019年. All rights reserved.
// #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) {
@autoreleasepool {
NSMutableArray *lArr1 = [NSMutableArray array];
NSMutableArray *lArr2 = [NSMutableArray array];
for (int i = ; i < ; ++i) {
[lArr1 addObject:@(i)];
[lArr2 addObject:@(i)];
} //反向遍历
// [lArr1 enumerateObjectsWithOptions:(NSEnumerationReverse)
// usingBlock:^( NSNumber* obj, NSUInteger idx, BOOL * _Nonnull stop) {
// NSLog(@"%@,ind:%lu", obj,(unsigned long)idx);
// if (idx == 90) {
// *stop = YES;
// }
// }]; //思考:里循环能否终止外循环?
//A:可以实现!需要差异化小标和停止参数,然后在里层循环对外循环的stopOut进行操作!此时,对内循环stopIn是否操作会决定内循环是否能执行完毕。 /** 2019-04-03 01:08:30.003134+0800 块循环最具优势![3176:27943] 0,ind:0
2019-04-03 01:08:30.004040+0800 块循环最具优势![3176:27943] --0,ind:0
2019-04-03 01:08:30.004143+0800 块循环最具优势![3176:27943] --1,ind:1
2019-04-03 01:08:30.004679+0800 块循环最具优势![3176:27943] --2,ind:2
2019-04-03 01:08:30.004756+0800 块循环最具优势![3176:27943] --3,ind:3
2019-04-03 01:08:30.004819+0800 块循环最具优势![3176:27943] --4,ind:4
2019-04-03 01:08:30.004881+0800 块循环最具优势![3176:27943] --5,ind:5
2019-04-03 01:08:30.004914+0800 块循环最具优势![3176:27943] --6,ind:6
2019-04-03 01:08:30.004945+0800 块循环最具优势![3176:27943] --7,ind:7
2019-04-03 01:08:30.005036+0800 块循环最具优势![3176:27943] --8,ind:8
2019-04-03 01:08:30.005072+0800 块循环最具优势![3176:27943] --9,ind:9 */
[lArr1 enumerateObjectsUsingBlock:^( NSNumber* obj, NSUInteger idxOut, BOOL * _Nonnull stopOut) {
NSLog(@"%@,ind:%lu", obj,(unsigned long)idxOut); if (idxOut == ) {
*stopOut = YES;
} [lArr2 enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idxIn, BOOL * _Nonnull stopIn) {
NSLog(@"--%@,ind:%lu", obj,(unsigned long)idxIn);
if (idxIn == ) {
*stopOut = YES;
}
}];
}]; /** 2019-04-03 01:05:20.987109+0800 块循环最具优势![3020:25596] 0,ind:0
2019-04-03 01:05:20.987380+0800 块循环最具优势![3020:25596] --0,ind:0
2019-04-03 01:05:20.987427+0800 块循环最具优势![3020:25596] --1,ind:1
2019-04-03 01:05:20.987476+0800 块循环最具优势![3020:25596] --2,ind:2
2019-04-03 01:05:20.987499+0800 块循环最具优势![3020:25596] --3,ind:3 */
// [lArr1 enumerateObjectsUsingBlock:^( NSNumber* obj, NSUInteger idxOut, BOOL * _Nonnull stopOut) {
// NSLog(@"%@,ind:%lu", obj,(unsigned long)idxOut);
//
// if (idxOut == 2) {
// *stopOut = YES;
// }
//
//
// [lArr2 enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idxIn, BOOL * _Nonnull stopIn) {
// NSLog(@"--%@,ind:%lu", obj,(unsigned long)idxIn);
// if (idxIn == 3) {
// *stopIn = YES;
// *stopOut = YES;
// }
// }];
//
// }]; }
return ;
}

运行上面代码可见:

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

OC循环方法推荐-块循环遍历(比for循环好用)的更多相关文章

  1. php循环方法实现先序、中序、后序遍历二叉树

    二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree). <?php class Node { public $v ...

  2. javascript 终极循环方法for... of ..推荐

    js目前有很多的循环方法,如for, forEach,  for .. in,  for of 等等,而在ES6里面,我们又增加了一些数据结构,比如set,map,Symbol等. 那么我们该选取哪一 ...

  3. js------10种循环方法

    let arr = [{a:1},{a:2},{a:3},{a:4},{a:5}]; // 1.while循环 let sum = 0; let num = 1; while(num <= 1) ...

  4. 如果要遍历除了for循环,你还知道什么?——JavaScript的各种遍历方式

    如果要遍历除了for循环,你还知道什么?——JavaScript的各种遍历方式 这是曾经面试中的一道题目,当时的我用现在很潮的话讲,整个人是懵比的,我呆呆的说了句,我好像只知道for循环啊.后来回过神 ...

  5. angular.foreach 循环方法使用指南

    angular有自己的生命周期.循环给一个 angular监听的变量复值时.最好还是用angular自带的循环方法.“angular.foreach” },{a:}]; angular.forEach ...

  6. JavaScript里的循环方法总结

    JavaScript诞生已经有20多年了,我们一直使用的用来循环一个数组的方法是这样的: for (var index = 0; index < myArray.length; index++) ...

  7. Javascript/jQuery关于JSON或数组集合的几种循环方法

    JavaScript遍历JSON或数组集合: /** * 根据json数据生成option树形控件 * 如果有children节点则自动生成树形数据 * @param {JSON} data * @p ...

  8. 二叉树(前序,中序,后序,层序)遍历递归与循环的python实现

    二叉树的遍历是在面试使比较常见的项目了.对于二叉树的前中后层序遍历,每种遍历都可以递归和循环两种实现方法,且每种遍历的递归实现都比循环实现要简洁.下面做一个小结. 一.中序遍历 前中后序三种遍历方法对 ...

  9. JavaScript里的循环方法之forEach,for-in,for-of

    JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标 ...

随机推荐

  1. [考试反思]1018csp-s模拟测试79:荒谬

    对,如果你想把第5名粘进来,那么图片就是这么夸张. 然而和我并没有什么关系,实在是太菜了. 但是还是想吐槽出题人是真心没良心啊...做了达哥的良心题之后眼光极其挑剔 这套题的部分分设置非常愚蠢,唯一一 ...

  2. 卡特兰数&&prufer序列&&BSGS水题集

    首先说一下BSGS的一个坑点: 解方程A^x≡B(mod p) 需要特判一个东西=>A%p==B%p==0? 如果相等的话puts("1")反之则无解. 因为如果A%p=0, ...

  3. js清除节点内容(改变标签元素)

    <!DOCTYPE HTML><html> <head>        <meta http-equiv="Content-Type" c ...

  4. 正睿OI集训游记

    什么嘛....就是去被虐的... 反正就是难受就是了.各种神仙知识点,神仙题目,各式各样的仙人掌..... 但是还是学会了不少东西...... 应该是OI生涯最后一次集训了吧.... 这次的感言还是好 ...

  5. 参与国际化项目需遵循的java命名规范

    笔者最近帮助一些朋友应聘远程工作(一般都是一些国外的项目),国外的项目负责人一般都会要求提供github账号或者一些源代码,很多朋友在这一关就被筛选掉了,其中不乏一些我认为技术非常厉害的行业大牛,他们 ...

  6. UiPath之Word转换为PDF

    前几天在手机上看到其他的文章,里面提到如何将Word转换为PDf,在UiPath的ManagePackage中,下载一个WordToPDF的包, 我按照上面的方法试着做了一下,但是在转换的时候很不稳定 ...

  7. 关于BootStrap的相关介绍

    一.Bootstrap Bootstrap的官网:www.bootcss.com 1.响应式布局 Responsive web page 响应式/自适应的网页 可以根据浏览器设备的不同(pc,pad, ...

  8. docker监控容器

    Weave Scope: 是能够自动生成一张 Docker 容器web动态图的监控软件,能够让我们直观地理解.监控和控制容器. 监控一台主机: 第一步:安装 [root@localhost ~]# c ...

  9. C#索引器与数组的区别

    1.索引器的索引值类型不限定为整数 2.索引器允许重载 3.索引器不是一个变量 4.索引器以函数签名方式this标识,而属性采用名称来标识,名称可以任意 5.索引器不能使用static来进行声明,属性 ...

  10. 怎样在PaaS平台上搭建一个会自动关闭的会议室

    首相得解释一下,什么叫做会自动关闭的会议室.我们的会议室是存在一个会议预定系统的,一般情况下,我们需要开会的时候,需要先抢占会议室.等待要开会的时候,去会议室里边开会,如果里边有别人,我们可以告诉他们 ...