一、简单Block的声明和实现
- (void)viewDidLoad {
[super viewDidload];
//声明block,void表示无返回值也可以声明返回值
void(^test)(void);
//定义test block
test = ^{NSLog@"无返回值"}
//调用block
test();
}
打印信息
2016-03-05 16:24:25.254 GCD-BLOCK[1064:29597] xxx
int (^myBlock) (int) = ^(int num){
return num * num;
}
说明:
int:返回值类型,如果没有返回值则为void
(^myBlock):块定义需要有一个^标记,myBlock是块名称
(int):参数类型列表,如果没有参数则为void
^(int num):以^开头的参数列表,如果没有则为void,也可以省略
{}:block体(相当于函数体)
注意:block可以访问局部变量但是不能对其进行赋值,也就是不能修改!如下图错误:
想修改也是可以的,加上__block 或者staic。例如: __block int a = 100;为什么要加?看百度结果:
此处不能修改的原因是在编译期间确定的,编译器编译的时候把a的值复制到block作为一个新变量(假设是a‘ = 10),此时a'和a是没有关系的。