相信大家都明白 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;
}
int c = sumBlock(10,10);
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 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;
};
原文:https://www.cnblogs.com/iOS-July/p/9177116.html