局部变量 <> 全局 , static 局部变量, __block NSObject* blockObj

局部变量    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++了

}

你可能感兴趣的:(局部变量 <> 全局 , static 局部变量, __block NSObject* blockObj)