一、什么是block?
能够读取其他函数内部变量的函数。
block与函数的相似性:
(1)可以保存代码
(2)有返回值
(3)有形参
(4)调用方式一样
二、实现原理?
block的实现是基于C语言中的指针与函数指针。
三、通常使用block完成什么工作?
(1)使用block实现委托模式
(2)多线程与block
四、基本使用
(1)定义block变量
// 定义一个block类型的变量,打印n个数
void(^MYBlock)(int)=^(int n){
for (int i = 0; i < n; i++) {
NSLog(@"%d", i);
}
};
// 调用block
MYBlock(5);
(2)使用block封装代码
// 有参数
int (^block1)(int, int) = ^(int a,int b)
{
return a + b;
};
// 无参数
int (^block2)()=^(){
return 0;
};
// 无参数的省略形式
int (^block3)()=^(){
return 0;
};
(3)block访问外部变量
1.block内部可以访问外部变量
2.默认情况下block不能修改外部的局部变量
3.给局部变量加上__block关键字,这个局部变量可以再block内部修改
(4)利用typedef定义block类型(类似于函数指针)
typedef int (^myBlock)(int, int);