您的位置:首页 > 编程语言

学习笔记之 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 可以被当作参数直接传递
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中是只读的!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: