最近在看一本书《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. day2 上午 游戏 对应关系--->判断素数---->多重背包 神题

    #include<iostream> using namespace std; int n; ; ]; long long p[maxn]; long long dp[maxn][maxn ...

  2. 获取Centos的Docker CE

    Docker文档 Docker提供了一种在容器中运行安全隔离的应用程序的方法,它与所有依赖项和库打包在一起. 获取Centos的Docker CE 一.OS要求 要安装Docker Engine-Co ...

  3. 『数据结构』RMQ问题

    RMQ(Range Minimum/Maximum Query),即区间最值问题. 对于长度为 n 的数列 A ,回答若干查询 RMQ(A,i,j)(i,j<=n) ,返回数列 A 中下标在 i ...

  4. 面试开挂:近百道Java面试题整理

    1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件. Java被 ...

  5. (二十一)golang--字符串中的函数

    golang中ascii对应的字符占一个字节,而汉字占三个字节. (1)统计字符串的长度len (2)字符串遍历,同时处理有中文的问题r:=[]rune(str) (3)字符串转整数:n,err:= ...

  6. # & 等特殊字符会导致传参失败

    # & 等特殊字符会导致 post 传参失败 处理方法使用 encodeURIComponent 将字符串转化一下 实例 // toUpperCase() 转化为大写字母 var cateco ...

  7. PL真有意思(二):程序设计语言语法

    前言 虽然标题是程序语言的语法,但是讲的是对词法和语法的解析,其实关于这个前面那个写编译器系列的描述会更清楚,有关语言语法的部分应该是穿插在整个设计当中的,也看语言设计者的心情了 和英语汉语这些自然语 ...

  8. C# Json之序列化与反序列化

    前言:在实际开发过程中经常都要和Json打交道,序列化与反序列化就成了开发中必不可缺的技能.本篇博客就教大家如何进行Json序列化与反序列化. 首先要添加引用NuGet包,Newtonsoft.Jso ...

  9. windows 10 上使用pybind11进行C++和Python代码相互调用 | Interfacing C++ and Python with pybind11 on windows 10

    本文首发于个人博客https://kezunlin.me/post/8b9c051d/,欢迎阅读! Interfacing C++ and Python with pybind11 on window ...

  10. 超速入门AT指令集 | 我的物联网成长记

    [摘要] 在物联网中,AT命令集可用于控制&调测设备.通信模块入网等.本文为您介绍NB-IoT常用的AT命令集及其调测工具. 什么是AT指令集 AT命令,用来控制TE(Terminal Equ ...