局部变量 copy 以后的修改不会改变block 因为是copy
static 局部变量, __block NSObject* blockObj 以后的修改会改变block 因为是地址引用
1、局部变量
局部自动变量,在Block中只读。Block定义时copy变量的值,在Block中作为常量使用,所以即使变量的值在Block外改变,也不影响他在Block中的值。
{
int base = 100;
long (^sum)(int, int) = ^ long (int a, int b) {
return base + a + b;
};
base = 0;
printf("%ld\n",sum(1,2));
// 这里输出是103,而不是3, 因为块内base为拷贝的常量 100
}
2全局 , static 局部变量, __block NSObject* blockObj //修改的地址
int base = 100;//全局
{
static int base = 100; // static 局部变量
__block int base = 100;// __block NSObject* blockObj
long (^sum)(int, int) = ^ long (int a, int b) {
base++;
return base + a + b;
};
base = 0;
printf("%ld\n",sum(1,2));
// 这里输出是4,而不是103, 因为base被设置为了0
printf("%d\n", base);
// 这里输出1, 因为sum中将base++了
}