八.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进行获取

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容