为了保证block内部能够正常访问外部的变量,block有个变量捕获机制,下面我们就来看看,block针对不同类型的变量是怎样进行捕获的:
x:全局变量
i:局部变量
j:静态局部变量
我们来看三种类型变量在block底层数据结构中的捕获情况:
x:全局变量,未捕获
i:局部变量,值捕获
j:静态局部变量,地址捕获
变量的使用:
x:全局变量,直接访问
i:局部变量,从block结构体中直接获取该属性的值
j:静态局部变量,从block结构体中获取该属性的地址,再由地址获取值
结论
由于局部变量的内存可能会被销毁,所以block会捕获局部变量的值;
静态局部变量的内存在程序运行期间不会被销毁,所以block会捕获静态局部变量的地址;
由于全局变量可以直接访问,所以block不会捕获全局变量;