block用来保存一段代码,标志:^
block跟函数很像,可以保存代码,有返回值,有行参,调用方式也一样。
如果block没有行参可以省略后面的小括号。
1.定义没有新参的block变量
void(^myBlock)() = ^{
NSlog(@"----------")
};
//利用定义的block变量调用block内部的代码
myBlock();
2.带参数的block
int(^sumBlock)(int, int) = ^(int a, int b)
{
return a + b;
};
int c = sumBlock(10 ,20);
3.编写一个block,让它输出一条,或者多条直线。
void(^lineBlock)(int) = ^(int n)
{
for(int i = 0; i<n; i++){
NSLog(@"------------");
}
};
// 输出3条直线
lineBlock(3);
4.使用typedef定义block
typedef int (^MyBlock)(int, int);
MyBlock sumBlock;
sumBlock = ^(int a, int b){
return a+b;
};
或者
MyBlock sumBlock = ^(int a, int b){
return a+b;
};
注意点:调用的时候不能使用MyBlock,而是用变量名来调用
// 输出上述结果
NSLog(@"%d-%d",sumBlock(10, 9));
5.block内部可以访问外面的变量
默认情况下,bock内部不能修改外面的局部变量
给局部变量加上_block关键字,这个局部变量就可以在block内部修改
int a = 10;
_block int b = 20;
void(^block)();
block = ^{
NSLog(@"a = %d, a);
b = 90;
}