[ 1 ] block
1,
普通的局部变量声明后,给block内部使用的话
block内部只会引用它的初始值(block定义的那一刻),block不能跟踪局部变量的改变
block会在定义的那一刻,就直接获得外部局部变量的值,以后都不会变;
即 block括号内获得的输出值只会永远是从上面获得的int age = 10; 下面再对age如何赋值毫无影响
2
加上 下划线 __block修饰的block就不一样了,block方法内部会一直引用被__block修饰的变量; 这是让block获取到变量的方法
3
用static修饰的变量
block也能一直访问该age变量, 因为用static修饰了,这个局部变量就会变成了静态变量,会一直存在内存中,所以block能一直访问到这个变量,跟踪它的变化; 而不加修饰声明的普通局部变量,声明之后就会死掉., 如果在外边在调用block,就会访问不到这个变量, 所以为了防止这种情况出错,block在用普通的局部变量的时候就会直接把值定死,不会再变化;
4
block引用 全局变量,
num声明在block方法外部,是一个全局变量, 会一直存在于内存中, block就也能一直访问到它的变化