/*
Objective-c - 在block内部访问变量
1> 在block代码块的内部可以定义变量.
1,在block代码块内部也可以定义和外部同名的变量,访问变量的时候遵循就近原则.
2,在block代码块内部可以访问外部变量的值.
3,在block代码块内部可以访问外部全局变量和局部变量的值,在block代码块的内部可以修改全局变量的值,但是不能修改外部局部变量的值
4,如果希望在block代码块的内部修改外部局部变量的值,可以使用__block修饰这个局部变量.
如下代码:
*/
#import <Foundation/Foundation.h>
//全局变量num1
int num1 = 1;
int main(int argc, const char * argv[]) {
//局部变量num2
int num2 = 2;
NSLog(@"局部变量num2 = %d", num2);
//使用__block修饰的局部变量num3
__block int num3 = 3;
//使用typedef定义的block变量
typedef void(^NewType)();
//定义block变量并初始化
NewType b1 = ^(){
//在可以定义变量同名变量,访问的时候遵循就近原则
int num2 = 20;
int num4 = 40;
//在block内部修改全局变量的值
num1 = 10;
//在block修改使用__block修饰的局部变量的值
num3 = 30;
NSLog(@"num1 = %d\tnum2 = %d\tnum3 = %d\tnum4 = %d", num1, num2, num3, num4);
};
//调用
b1();
//此处打印的num2是局部变量num2 = 2,定义在block代码段内部的num2已经作用域结束释放了.
NSLog(@"局部变量num2 = %d", num2);
return 0;
}