学习笔记之 Block代码块
来源:互联网 发布:周杰伦婚礼音乐 知乎 编辑:程序博客网 时间:2024/06/07 17:29
Blocks定义
1.Block是oc中的一种数据类型
2.^是Block的特有标记
3.Block的实现代码包含在{}之间
4.大多数情况下,以内联inline函数的方式被定义和使用
5.Block与C语言的指针有些相似,但使用起来更加灵活
示例
int i = 10; void(^demoBlock)() = ^{ NSLog(@"demo Block"); NSLog(@"%d",i); }; i = 100; demoBlock(); int (^sumBlock)(int, int) = ^(int x, int y){ return x + y; };格式说明:
(返回类型) (^块名称) (参数名称) = ^(参数列表) {代码实现};
如果没有参数,等号后面的参数列表()可以省略
//Block 可以被当作参数直接传递 NSArray *array = @[@"张三",@"李四",@"王五",@"赵六"]; [array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { NSLog(@"第%d内容是%@",(int)idx,obj); if ([@"王五" isEqualToString:obj]) { *stop = YES; } }]; } return 0;}
<span style="font-family: Arial, Helvetica, sans-serif;"> //打印内容:</span>
<p class="p1"><span class="s1"><strong>2015-11-29 22:47:41.930 blocks[1296:1013880] </strong></span><span class="s2"><strong>第</strong></span><span class="s1"><strong>0</strong></span><span class="s2"><strong>内容是张三</strong></span></p><p class="p1"><span class="s1"><strong>2015-11-29 22:47:41.931 blocks[1296:1013880] </strong></span><span class="s2"><strong>第</strong></span><span class="s1"><strong>1</strong></span><span class="s2"><strong>内容是李四</strong></span></p><p class="p1"><span class="s1"><strong>2015-11-29 22:47:41.931 blocks[1296:1013880] </strong></span><span class="s2"><strong>第</strong></span><span class="s1"><strong>2</strong></span><span class="s2"><strong>内容是王五</strong></span></p>
//说明:遍历并NSLog()arr中的内容
<p class="p1"><span class="s1">//</span><span class="s2">在被当参数传递时,</span><span class="s1">Block</span><span class="s2">同样可以使用在定义之前生命的局部变量</span></p><p class="p2"><span class="s2"> </span><span class="s3">int</span><span class="s2"> stopIndex = </span><span class="s4">1</span><span class="s2">;</span></p><p class="p2"><span class="s2"> </span><span class="s5">NSArray</span><span class="s2"> *array = </span><span class="s4">@[</span><span class="s6">@"</span><span class="s7">张三</span><span class="s6">"</span><span class="s2">,</span><span class="s6">@"</span><span class="s7">李四</span><span class="s6">"</span><span class="s2">,</span><span class="s6">@"</span><span class="s7">王五</span><span class="s6">"</span><span class="s2">,</span><span class="s6">@"</span><span class="s7">赵六</span><span class="s6">"</span><span class="s4">]</span><span class="s2">;</span></p><p class="p2"><span class="s2"> [array </span><span class="s8">enumerateObjectsUsingBlock</span><span class="s2">:^(</span><span class="s3">id</span><span class="s2"> </span><span class="s3">_Nonnull</span><span class="s2"> obj, </span><span class="s5">NSUInteger</span><span class="s2"> idx, </span><span class="s3">BOOL</span><span class="s2"> * </span><span class="s3">_Nonnull</span><span class="s2"> stop)</span></p><p class="p2"><span class="s2"> {</span></p><p class="p2"><span class="s2"> </span><span class="s8">NSLog</span><span class="s2">(</span><span class="s6">@"</span><span class="s7">第</span><span class="s6">%d</span><span class="s7">内容是</span><span class="s6">%@"</span><span class="s2">,(</span><span class="s3">int</span><span class="s2">)idx,obj);</span></p><p class="p2"><span class="s2"> </span><span class="s3">if</span><span class="s2"> ([</span><span class="s6">@"</span><span class="s7">王五</span><span class="s6">"</span><span class="s2"> </span><span class="s8">isEqualToString</span><span class="s2">:obj] || idx == stopIndex)</span></p><p class="p2"><span class="s2"> *stop = </span><span class="s3">YES</span><span class="s2">;</span></p><p class="p2"><span class="s2"> }</span></p><p class="p3"><span class="s2"> </span></p><p class="p2"><span class="s2"> ];</span></p><p class="p2"><span class="s2"> }</span></p>打印结果:<p class="p1"><span class="s1"><strong>2015-11-29 23:00:57.510 blocks[1311:1055122] </strong></span><span class="s2"><strong>第</strong></span><span class="s1"><strong>0</strong></span><span class="s2"><strong>内容是张三</strong></span></p><p class="p1"><span class="s1"><strong>2015-11-29 23:00:57.511 blocks[1311:1055122] </strong></span><span class="s2"><strong>第</strong></span><span class="s1"><strong>1</strong></span><span class="s2"><strong>内容是李四</strong></span></p>
注意,默认情况下,Block外部的变量,在Block中是只读的!
0 0
- 学习笔记之 Block代码块
- IOS学习之block代码块
- IOS学习之block代码块
- IOS学习之block代码块
- IOS学习之block代码块
- IOS学习之block代码块
- 黑马程序员-OC学习笔记-----ARC和代码块block
- 黑马程序员--IOS学习笔记(代码块Block总结)
- ww笔记-iOS之代码块(block)的使用
- Block块的学习笔记
- java学习笔记之代码块
- Java学习笔记之初始化块(代码块)
- OC学习 第十四章 Block代码块
- XZ_iOS之block封装代码块
- 学习笔记之Block
- BLOCK代码块
- iOS 代码块Block
- block代码块
- codeigniter是如何实现钩子机制的?
- 下拉列表
- javascript的四种函数调用模式以及相应的this绑定
- linux-文件系统管理02-centos7-xfs文件系统
- Android AdapterView View的复用机制分析
- 学习笔记之 Block代码块
- object中几个有趣的方法!
- c# 使用sharppcap实现 网络抓包
- 《leetCode》:Sort Colors
- [BZOJ1858] [Scoi2010]序列操作
- C# winForm__Gmap.net
- java基础之序列化
- malloc,calloc,realloc用法小结
- CPP 6th 读书笔记——类(1)