最近在看一本书《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. 口胡题fr

    T1五种贡献恶心的要死.$1.grand$$2.father$$3.brother$$4.son$$5.grandson$我们选择维护三个量.1.儿子和,$sx$2.孙子和,$gsx$3.自己的值,$ ...

  2. 如何在 Spring/Spring Boot 中做参数校验?你需要了解的都在这里!

    本文为作者原创,如需转载请在文首著名地址,公众号转载请申请开白. springboot-guide : 适合新手入门以及有经验的开发人员查阅的 Spring Boot 教程(业余时间维护中,欢迎一起维 ...

  3. EffectiveJava-4

    一.基本类型优先于装箱基本类型 Java的基本数据类型也叫做内置类型是java语言本身提供的数据类型,是引用其他类型的基础.Java的基本数据类型分为:整数类型.浮点类型.字符类型.布尔类型这四个类型 ...

  4. 通俗易懂了解Vuex

    1.前言 在使用Vue进行开发的时候,关于vue组件通信的方式,除了通俗易懂了解Vue组件的通信方式这篇博文谈到三种通信方式,其实vue更提倡我们使用vuex来进行组件间的状态管理以及通信问题.Vue ...

  5. 常见Java数据结构&优缺点

      数组   优点:查询快,如果知道索引可以快速地存取   缺点:删除慢,大小固定     有序数组   优点:比无序数组查找快   缺点:删除和插入慢,大小固定   栈   优点:提供后进先出的存取 ...

  6. [转载]2.4 UiPath循环活动While的介绍和使用

    一.While循环的介绍 先判断条件是否满足, 如果满足, 再执行循环体, 直到判断条件不满足, 则跳出循环 二.While循环在UiPath中的使用 1. 打开设计器,在设计库中新建一个Flowch ...

  7. python基础-面向过程编程

    面向过程编程 面向过程编程其实是一种机械式的思维方式,其核心就是"过程". 过程指的是一种解决问题的步骤,即先干什么再干什么,最后干什么. 优点:将复杂的问题流程化,进而简单化. ...

  8. Python文件打包exe教程——Pyinstaller(亲测有效)

    今天将要解决一个问题,如何打包Pyhon文件 众所周知,Python文件的后缀名为“.py” 所以执行Python文件的要求之一便是具有python环境. 偶尔特殊情况,或者运行一些比较简单的工具,但 ...

  9. MySQL系列:MySQL的基本使用

    数据库的基本操作 在MySQL数据库中,对于一个MySQL示例,是可以包含多个数据库的. 在连接MySQL后,我们可以通过 show databases; 来进行查看有那么数据库.这里已经存在一些库了 ...

  10. 《计算机网络 自顶向下方法》 第6章 链路层和局域网 Part2

    待补充完善 Web 页面的请求历程 应用层     报文.主机 运输层     报文段. 网络层     数据报.路由器.IP 地址 链路层     以太网帧.交换机.MAC 地址 步骤 1)到 4) ...