相信大家都明白 block
的重要性是毋庸置疑的,它本身封装了一段代码并将这段代码当做变量,通过 block()
的方式进行回调。block的这种机制和 函数指针
非常像。而我的理解即是: block 就相当于是 有返回类型
的 代码块
。
一、定义block
返回类型 (^block类型名称) (block形参):
void (^myBlock)() = ^(){
NSLog(@"---这是一个block---");
};
int (^sumBlock)(int, int) = ^(int a, int b) {
return a + b;
};
就等同于:
int a = 10;
的形式
拆开写:
void (^ block)();
block = ^{
NSLog(@"---这也是一个block---");
};
对比函数:
int sum(int a, int b)
{
return a + b;
}
二、调用block
int c = sumBlock(10,10);
三、block访问外部变量
-
block内部可以访问外面的变量
int a = 10; void (^ block)(); block = ^{ NSLog(@"a=%d",a); };
-
默认情况下,block内部不能修改外面的局部变量
int a = 10; void (^ block)(); block = ^{ a = 20; }; //这是错误的
-
给局部变量加上
__block
关键字,这个局部变量就可以在block内部修改__block int a = 10; void (^ block)(); block = ^{ a = 20; };
四、利用typedef定义block类型
typedef int (^myBlock)(int, int);
myBlock block = ^(int a, int b) {
return a + b;
};
拆开写:
typedef int (^myBlock)(int, int);
myBlock block;
block = ^(int a, int b) {
return a + b;
};
网友评论