学习笔记之 Block代码块
2015-11-29 22:50
302 查看
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外部的变量,在Block中是只读的!
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中是只读的!
相关文章推荐
- codeigniter是如何实现钩子机制的?
- 从头认识java-10.7 使用异常的限制汇总
- Eclipse开发C/C++ 安装配置图文详解
- Matlab的plot~各种颜色和线形
- Java中一些常用的正则表达式
- eclipse下如何关联android-support-v4.jar源码
- 第二个spring冲刺第6天
- virtualbox 与 腾讯信鸽不得不说的事
- Spring事务配置的五种方式
- C语言开发总结(十八)
- homerHEVC代码阅读(9)——基础结构之low_level_funcs_t
- 在Spring3中,配置DataSource的方法有6种。
- C#和JAVA实现图片和BASE64互转
- 多个Jdk版本(转)
- Heap与stack的差别
- 逐行快速读入
- java 中的异常
- spring 使用classpath方式加载hibernate映射文件
- MPlayer源代码分析
- windows8 64位 IIS8 PHP5.5 安装 Imagemagick 组件