标签:
类似于js里面的闭包,java中的匿名函数,C#的委托,可以将func当做参数传递:
1.Block的声明
Block的定义和函数的声明差不多,就是把函数名改成(^blockName)即可。下面是block声明的代码。
有返回值的
int (^sumBlock) (int, int);
无返回值的
void (^myBlock)(int, int);
2.给block块赋值
给声明好的block,赋值。block的值就是个函数体,给block块赋值有两种方式,一个在声明的时候赋值,一个是先声明在赋值。
先声明再赋值
//代码块的声明 void (^myBlock)(int, int); //给代码块赋值 myBlock = ^(int a, int b) { //test ++; //报错 NSLog(@"main_test = %d", test); //blockVar++不报错; blockVar ++; NSLog(@"blockVar = %d", blockVar); int sum = a + b; NSLog(@"a + b = %d", sum); };
在声明的时候赋值
int (^sumBlock) (int, int) = ^(int a, int b) { int sum = a + b; return sum; };
3.调用block
block的使用和普通函数的使用相同,调用方法如下:
//调用代码块并接收返回值 int sum = sumBlock(20, 30);
4.把block当做参数传入函数
//把代码块作为函数参数 void blockFunction(int (^myBlock)(int, int)) { int sum = myBlock(10,20); NSLog(@"fun_sum = %d", sum); }
5.在代码块中使用局部变量和全局变量
在block中可以和对全局变量进行访问和修改,但对局部变量只可以访问,若想修改的话,我们可以在声明局部变量的时候加上关键字__block
代码如下
__block int blockVar = 0;
标签:
原文地址:http://www.cnblogs.com/xiguain/p/4757226.html