block值传递分为两种情况
类似于函数参数的值传递,block内部对值的改变对外部没有影响,外部改变对block内部也没有影响。
外部局部变量
没有被任何关键字修饰注意:
block中的外部变量在定义block时被传入block,而不是在执行时被传入.
含义:类似于函数参数的指针传递,block内部对值的改变对外部有影响,外部改变对block内部也有影响。
验证代码:
- (void)viewDidLoad {
[super viewDidLoad];
int a = 3;
void (^block)() = ^{
NSLog(@"a = %d", a);
};
a = 5;
block();
}
打印结果为:a = 3
此代码也验证了block中的外部变量在定义block时被传入block,而不是在执行时被传入
2.指针传递
- (void)viewDidLoad {
[super viewDidLoad];
__block int a = 3;
void (^block)() = ^{
NSLog(@"a = %d", a);
};
a = 5;
block();
}
打印结果为:a = 5
原文:http://www.cnblogs.com/mengfei90/p/5145803.html