1、局部变量
NSInteger a = 1;//局部变量
void(^block)(void) = ^{
NSLog(@"a:%ld", a);
};
a = 2;
block();
打印结果为: 1
此时block变量是值传递
2、全局变量
NSInteger b = 3;//全局变量
void(^block1)(void) = ^{
NSLog(@"b:%ld", b);
};
b = 4;
block1();
打印结果为: 4
此时block变量是指针传递
3、静态变量
static NSInteger c = 5;
void(^block2)(void) = ^{
NSLog(@"c:%ld", c);
};
c = 6;
block2();
打印结果为: 6
此时block变量是指针传递
4、__block修饰变量
__block NSInteger d = 7;
void(^block3)(void) = ^{
NSLog(@"d:%ld", d);
};
d = 8;
block3();
打印结果为: 8
此时block变量是指针传递
总结:
-
如果是局部变量,Block是值传递
-
如果是静态变量,全局变量,__block修饰的变量,block都是指针传递
网友评论