一、Block概要
回顾一下C语言的变量,分别有:局部变量、静态变量和全局变量。由于静态变量和全局变量本身存在的安全问题,所以在编程中尽量少的使用它们就成为必然,而局部变量的作用域的局限性使得传值成为编程中的很重要的一部分。这时,Block的作用就体现出来了。 Block是C的扩充功能,也可以说是带有自动变量的匿名函数,在计算机科学中也可以称其为闭包或Lambda计算,本文将就Block的传值功能做下介绍,由于本文是基于xcode的iOS开发,所以将其统称为Block。
二、Block语法
1.block表达方式:
^(int a){
//在这里输入要执行的代码
}
在C语言中,可以把定义的函数的地址复制给函数指针变量类型中:
int function(int a);
int *functionP = &function;
同样的,我们也可以把Block的地址赋值给Block类型的变量中:
int (^Num)(int) = ^(int a){
return a+1;
};
这样,就可以通过调用名为Num的Block变量来执行Block中命令了。上面的命令看起来是不是很眼熟?没错,只是用^代替了*而已,其他的和函数基本一致就可以了。
另外,Block变量可以当作一般的变量使用:
int (^Block)(int) = ^(int a){
return a+1;
};
int (^Block1)(int) = Block;
int (^Block2)(int);
Block2 = Block1;
NSLog(@"%d",Block2(1));
//输出为2016-04-14 00:18:03.579 BlockText_OC[8522:96046] 2