黑马程序员-----Category,protocol和block(四)

来源:互联网 发布:mac顶部菜单栏隐藏 编辑:程序博客网 时间:2024/06/01 08:26

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

Block
1>概念
Block是用来封装一段代码,与函数不同的是Block是在程序运行过程中用来保存一段代码,运行时才确定的,不像函数在编译时就必须确定。
2>Block定义
返回值 (^Block名)(参数列表) = ^(参数列表){
//Block实现
return 返回值
};
注意
①如果Block没有参数,那么等号右边的(参数列表)可以省略。
②因为Block是数据类型所以必须加上“;”。


3>Block调用
Block不是普通代码块,必须像函数一样显示调用,才能执行Block;调用方法跟函数指针一样


4>举例
①无参数的Block
int main()
{
    //Block定义
    void(^MyBlock)() = ^{
NSlog(@"-----------");
    }


    //Block调用
    MyBlock();
    return 0;
}
②有参数的Block
int main()
{
   int a;
   //Block定义
   int (^sum)(int,int) = ^(int a, int b){
        return a + b; 
   }
  
   //Block调用
   a = sum(10,20);


   return 0;
}


5>函数指针与Block的比较
定义
①Block:   返回值 (^Block名)(参数列表) = ^(参数列表){//Block体实现};
eg:int (^sum)(int, int) = ^(int a, int b){//Block体实现};
②函数指针:返回值 (*指针名)(参数列表);
eg:int (*p)(int, int);
        p = sum;
调用
①Block:   Block名(参数列表);
eg:sum(10,20);
②函数指针:指针名(参数列表);
p(10,20);


6>typedef使用
①Block
typedef int (^SumBlock)(int, int);
SumBlock myblock = ^(参数列表){//Block体实现};
②函数指针
typedef int (*pSum)(int, int);
pSum p = sum;

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com
0 0