八.Block变量捕获

image.png

以上block执行后打印结果为10 因为block结构体内部有个新的age被赋值为10 ,下面的age怎么改都不会影响到里面的age的值

block的变量捕获

针对上述的局部变量age 就是auto变量 就会捕获到block内部,但是是值传递

static变量

由上图可知 对于使用static修饰的局部变量被捕获到block内部后是传递的地址指针,所以后面的height更改为20后打印的结果就是20

image.png

这个打印后都是20 因为全局变量不会捕获,直接拿到最新值就可以

总结:局部变量为什么需要捕获,因为需要跨函数进行赋值,需要在内部进行存储,而全局变量则不需要,换言之全局变量在哪个函数中都可以获取到

image.png

对象也可以捕获到,因为self是个局部变量,在test函数中有两个隐藏参数,一个是self,一个是_cmd

image.png

对于_name来说,因为name为MJPerson的属性,其调用时self->_name进行调用,所以block内部会捕获self,并通过self进行获取

你可能感兴趣的:(八.Block变量捕获)