block是匿名inline代码集合:
a) 像函数一样有定义好的参数
b) 有返回值
c) 能从定义的作用域中捕获状态(值)
d) 可以修改作用域状态(值)
e) 可以和统一作用域下的其它blocks共享值的变化
f) 能够在作用域(栈)被destroy后继续分享或者修改作用域
你可以引用三种类型的变量,就像从函数中引用一样:
a) 全局变量,包括静态变量
b) 全局函数(并不完全算是变量)
c) 局部变量和参数(来自于一个作用域)
Blocks支持另外两种变量
d) __block变量。这些在block里是可以改变的,并且在copy到堆上时是被保存过上下文的。
e) Const变量。
以下规则在block中适用:
a) 全局变量是可以访问的,包括在作用域之内的static变量
b) 传到block中的变量是可访问的
c) 对于闭包,栈上的变量(非静态)会被当成静态变量一样被捕获。这些值在block表达式产生的一刻被定格。
d) __block修饰的变量在block内仍旧是可变的。即便栈转向了堆。
e) 在block中定义的变量,和在函数中定义的变量是一样的。每一处对block的调用都会返回其中对应变量的copy。