block的�作用:
用来保存一段代码
block的声明:
返回值(^block变量名)(参数), 如:------>
void(^block)()
block的定义:三种方式
^(参数){};
第一种
void(^block)() = ^(){
};
第二种:
如果没有参数,参数可以隐藏
void(^block)() = ^{
};
第三种:
block返回类型可以省略,不管有没有返回值,都可以省略
定义的时候,有参数 必须要写参数,而且必须要有参数变量名
int(^block)() = ^int{
return 1;
};
block的类型
int(^block)(NSString *) = ^(NSString *name){
return 1;
}
block的调用
block();
block变量传递
注意点:
如果是局部变量,block是值传递
**注意点:
**如果是静态变量,全局变量,_block修饰的变量,block是指针传递
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
int a = 1;
// __block int a = 1;
// static int a = 1;
void(^block)()=^{
NSLog(@"%d",a);
};
a = 2;
// 调用
block();
NSLog(@"%@",block);
}
输出结果:
使用局部变量时的输出结果
int a = 1;
使用静态变量时的输出结果
static int a = 1;
使用__block变量跟全局变量时的输出结果
__block int a = 1;
//或
a = 1;
block使用的快捷方式
在xcode中输入typedefblock
,即可快捷生成以下block声明代码
typedef <#returnType#>(^<#blockName#>)(<#arguments#>);
在xcode中输入inlineBlock
,即可快捷生成以下block代码
<#returnType#>(^<#blockName#>)(<#parameterTypes#>) = ^(<#parameters#>) {
<#statements#>
};