iOS block捕获变量

为了保证block内部能够正常访问外部的变量,block有个变量捕获机制,下面我们就来看看,block针对不同类型的变量是怎样进行捕获的:

iOS block捕获变量_第1张图片

 x:全局变量

  i:局部变量

  j:静态局部变量

我们来看三种类型变量在block底层数据结构中的捕获情况:

iOS block捕获变量_第2张图片

 x:全局变量,未捕获

  i:局部变量,值捕获

  j:静态局部变量,地址捕获

变量的使用:

       

 x:全局变量,直接访问

  i:局部变量,从block结构体中直接获取该属性的值

  j:静态局部变量,从block结构体中获取该属性的地址,再由地址获取值

结论

iOS block捕获变量_第3张图片

        由于局部变量的内存可能会被销毁,所以block会捕获局部变量的值

        静态局部变量的内存在程序运行期间不会被销毁,所以block会捕获静态局部变量的地址

        由于全局变量可以直接访问,所以block不会捕获全局变量

        

 

你可能感兴趣的:(iOS,OC,ios,objective-c)