黑马程序员——Block数据类型

    Block数据类型,又被称为代码段。因为它可以封装一段代码。苹果官方建议多用block。因为在多线程控制、异步任务,集合遍历、集合排序、动画转场等方面用的很多。

Block的特点:

               1.Block 用于封装一段代码,并可以在任何时候执行。

               2.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。

Block的定义:

             例:int(^sum)(int ,int) = ^(int a,int b){

                     return a+b;

                   }

从形势上看和指向函数的指针比较像

              例:int(*p)(int,int) = sum;   //指针p 指向sum函数

他们之间也是有共同点的:

               1.都可以保存代码;2.都有返回值;3.都有形参;4.调用方式 一样。

用typedef 定义block类型:

   typedef  int(^MyBlock)(int,int);          //重新定义 后就可以用MyBlock定义新变量了。

 MyBlock   sumBlock=^(int a,int b ){

                 return a+b;

                };

注意点:

        在默认的情况下block内部可以访问外部的局部变量,不能修改。

         给外部的局部变量加上__block(block前有两个_连在一块)关键字后,这个局部变量就可以在block内部修改了。

例:  __block int sum = 10;       

      int (^MyBlock)(int)=^(int num){

        sum++;

return num+sum;

};

原文地址:https://www.cnblogs.com/newbee010/p/4348595.html