block是Objective-C中用c写的扩展功能,是一个带有自动变量的匿名函数。
一、理论基础
iOS4.0开始支持block,在编程过程中 block被oc看作对象,它封装了一段代码,可以在任何时候执行。对于局部变量是只读的。
定义:
声明实现写在一块:
int a = 10;
int (^aBlock)(int num) = ^(int num)
{
return num * a;
};
先声明后实现
int a = 10;
int (^aBlock)(int num);
aBlock = ^(int num){
return a*num;
};
其中,定义了一个名字为aBlock的blocks对象,并携带了相关信息:
1、aBlock 有两个形式参数,分别为int类型;
2、aBlock 的返回值为int 类型;
3、等式右边就是blocks的具体实现;
4、^ 带边blocks声明和实现的标示(关键字);
当然,你可以定义其他形式的block。e.g:无返回值,无形式参数等;
int a = 10;
int (^aBlock)(int num);
aBlock = ^(int num){
return a*num;
};
可以访问局部变量但是不能修改,如果想修改的话需要加关键字__block或者static.加了关键字__block的变量被称为block变量。
这里引出:static和const的区别:
1.const修饰的变量说明该变量是只读的。
2.static修饰的变量,这里static有两个作用,一是说明作用域,二是说明当前变量是静态存储的。
int a = 10;
int (^dBlock)(int) = ^(int num)
{
a++;
return num * a;
};
修改:
__block int a = 7;
int (^dBlock)(int) = ^(int num)
{
a++;// work!
return num * a;
};