------- IOS培训、android培训、期待与您交流! ----------
Block封装了一段代码,可以在任何时候执行
Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。
苹果官方建议尽量多用block。在多线程、异步任务、集合遍历、集合排序、动画转场用的很多.
block
block的标识是^
block的使用与函数十分相似:
1>都可以保存代码
2>都有返回值
3>有形参
void (^myblock)() =^{
NSLog(@"-------");
NSLog(@"--------");
};
myblock();
定义带有参数的block形式如下
int (^sumBlock)(int, int) = ^(int a,int b)
{
return a+b;
};
int a = sumBlock(10,11);
NSLog(@"a=%d",a);
与定义指向函数的指针类似
int sum(int a,int b)
{
return a+b;
}
int (*p)(int,int)=sum;
int b = p(10,12);
NSLog(@"b= %d",b);
对于每次bliock的定义都要使用void (^myblock)(int ,int)这么一串代码可以通过typedef 来简写
typedef int (^MyBlock)(int, int);
在给变量赋值时使用如下代码
Myblock sumblock = ^(int a, int b){
return a+b;
}
block 内部是可以直接访问外部的变量的值,但是不可以修改,如果想要修改外部变量的值需要是使用关键字_block
int a = 10;
__block int b =4;
void (^block) = ^{
NSLog(@"a=%d",a);
// a = 20;
b = 5;
};
block();