定义block变量
int (^myBlock)(int ,int );
普通代码块
{ do something...代码块中的成员变量作用域为代码块结束时 }
block封装代码块
block封装了一段代码,可以在任何时候调用。很像函数,可以保存代码,有参数返回值。
^(){ }; ^{ }; ^(int a ,int b){ };
定义+封装如下,block的标志:^
void (^blockName)()=^{//如果block没有形参可以省略^() do something... };
利用block调用block内部代码
blockName();
带参数返回值的block
int (^blockName)(int a,int b)=^(int a ,int b){ do something... return a+b; }; int c = blockName(1,2);
类似于C中的指针函数
int sum(int a ,int b) { return a+b; } int (*p)(int, int)=sum(); int c = p(1+2);
block成员变量作用域
int a = 1; __block int b = 2; void (^blockName)(); blockName = ^{ //1、block内部可以访问外部的变量 //2、默认情况下block不能修改外部的局部变量 如 a= 2; //3、如要修改外部的变量需要加上__block(两个下划线) 如 b = 1; }; blockName();
typedef定义block
//typedef定义函数指针 typedef int (*P)(int, int); int sum(int a ,int b) { return a+b; } P p1 = sum; P p2 = sum;
同样block中
typedef (^BlockName)(int, int);//定义类型,以后可以用BlockName这种类型来定义block变量 BlockName sumBlock; sumBlock = ^(int a ,int b){ return a + b; }; BlockName minusBlock = ^(int a ,int b){ return a - b; };