Block:
1.Block封装类一段代码,可以在任何时候执行.
2.Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.
3.在多线程,异步任务,集合遍历,动画转场用的很多.
block跟函数很像:
1.可以保存代码
2.可以有无返回值
3.可以有参数和无参数
4.调用方式一样
特点1>:
例1:无参无返
{
void (^myblock)() = ^{
NSLog(@"-----");
NSLog(@"-----");
};
}
myblock();例2:有参有返
{
int (^sumblock)(int, int) = ^(int a, int b){
return a+b;
};
NSLog(@"%d", sumblock(1,2));
void (^lineBlock)(int) = ^(int n){
for (int i = 0; i < n; i++) {
NSLog(@"+++++");
}
};
lineBlock(4);
}
特点2>:
// block内部可以访问外面的变量
// 默认情况下, block内部不能修改外面的局部变量
// 给局部变量加上__block关键字,这个局部变量就可以在block内部修改
例3:{
int a = 10;
__block int b =20;
void (^block)();
block = ^{
NSLog(@"%d",a);
b = 25;
NSLog(@"%d",b);
};
block();
NSLog(@"%d",b);
}
特点3>:
利用typedef定义block类型(类似函数指针)
例4:
typedef int (^MyBlock)(int, int);
{
MyBlock sumBlock;
sumBlock = ^(int a, int b){
return a + b;
};
MyBlock subBlock = ^(int a, int b){
return a - b;
};
MyBlock mulBlock = ^(int a, int b){
return a * b;
};
NSLog(@"%d - %d - %d",sumBlock(11,22),subBlock(22,11),mulBlock(11,22));
}