版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoxingaiwo/article/details/81228636
先看道笔试题,注释标识的很清楚。
int val=10;
const char *fmt="val=%d\n";
void (^blk)(void)=^{printf(fmt,val);};//block会对变量进行一次拷贝
val=2;//变量值得修改不会影响block中的值
fmt="There values were changed. val=%d\n";
blk();
printf("%d\n",val);//再次打印的值,与block无关,值为修改之后的值。
//如果想使用block修改局部变量的值,则使用以下方法。
__block int val2=10;
void (^blk2)(void)=^{val2=3;printf("%d",val2);};
blk2();
下面是Block的几种形式。
//1.返回值类型为void
void (^blockName)(int)=^void(int a){};
//2.参数为void
int (^blk4)(void)=^int{return 7;};
//3.返回值和参数都是void
void(^blk5)(void)=^{};
//4.匿名block
^int(void){return 5;};
//使用typedef简化Block的声明
typedef void (^blk6)(void);
//属性:property(nonamatic,copy)blk6 imageClickBlock;
//局部位置声明一个block属性
void (^globalBlockInMemory)(int number)=^(int number){int a=0;};
globalBlockInMemory(90);