类似于Java的匿名类,称为代码段
1、定义:
返回值 (^block名)(参数1,参数2...) = ^(参数1,参数2...){}
int (^sum)(int,int) = ^(int a,int b){
return a+b;
};
sum(1,2);
是不是有点像C的函数指针哦
来点更有意思的
#import <Foundation/Foundation.h>
typedef int (^SUM)(int,int); //定义类型
int main(int argc, const char * argv[])
{
@autoreleasepool {
//直接引用
SUM sum= ^(int a,int b){
return a+b;
};
sum(1,2);
}
return 0;
}
注意,在代码段中的默认能访问局部变量,不能修改,如需修改,加上
__Block关键字即可
如
#import <Foundation/Foundation.h>
typedef int (^SUM)(int,int); //定义类型
int main(int argc, const char * argv[])
{
@autoreleasepool {
int a_ = 0;
__block int b_ =1;
//直接引用
SUM sum= ^(int a,int b){
a_ = a;//此处语法报错了
b_ = b;//加上 __block可以修改
return a+b;
};
sum(1,2);
}
return 0;
}