黑马程序员技术交流社区

标题: block [打印本页]

作者: runsunlife    时间: 2015-8-27 06:36
标题: block
block
1、block是一种数据类型, 可以使用这种数据类型定义变量, 并赋值。
     block数据类型在使用前需要先定义该数据类型, 然后再使用(就像使用Person类一样, 先  
     定义一个Person类, 然后再通过Person类声明一个Person类型变量)。
     block这种数据类型用来保存一个方法、函数、一段代码
     使用inlineBlock辅助编写block代码  
     int (^block)(int,int) = ^(int n, int m){};  

2、block的基本概念  
Block对象是一个C级别的语法和运行机制。它与标准的C函数类似,不同之处在于,它除了有可执行代码以外,它还包含了与堆、栈内存绑定的变量。因此,Block对象包含着一组状态数据, 这些数据在程序执行时用于对行为产生影响。  
你可以用Block来写一些可以传到API中的函数语句,可选择性地存储,并可以使用多线程。 作为一个回调,Block特别的有用,因为block既包含了回调期间的代码,又包含了执行期间需要 的数据。  

3、block的基本用法  
     用^操作符来声明一个Block变量,并指明Block述句的开始。Block的主体部分包含在{}内,像下面的例子中一样(与C语法一样,“;”指明语句的结束):

4、block的typedef  
可以使用typedef定义一个Block的类型,便于在后续直接使用
格式: typedef  返回值类型 (^block变量名)(参数类型列表);

5、block访问外部变量  
   1)在block内部可以访问block外部的变量  
      block内部也可以定义和block外部的同名的变量(局部变量),此时局部变量会暂时屏蔽外部变量的作用域  
   2)在block内部不可以修改block外部的变量  
      默认情况下,Block内部不能修改外部的局部变量  
     给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改。

6、block作为函数的返回值  
   步骤:  1)使用typedef定义一个新的类型  
                //给block起一个别名
                typedef int(^newType)(int num1,int num2);

             2)使用新类型作为函数的返回值  
               //定义一个返回值是block类型的函数
               newType test4()
              {
                   //定义一个newType 类型的block变量
                  newType work1=^(int x,int y)
             {
                   return x+y;
           };
            return work1;
           }

          3)定义变量接收函数返回的值(block类型)  

          4)调用block  
7、block和函数的区别:
    1)定义方式不一样;
    2)block是一种数据类型;
    3)函数不可以嵌套使用,block可以嵌套使用;
    4)block因为是数据类型,所以可以作为函数的参数和返回值;
    5)函数则不可以作为函数的参数或者返回值。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2