学习笔记之 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
原创粉丝点击