iOS 底层学习11 -- Block捕获变量


如果block访问的是全局变量,就不需要捕获到block里面去!因为全局变量谁都可以访问呀,干嘛还要捕获呢。




就是以全局变量的方式去访问~
而且全局变量,不管是static全局变量,还是怎么样的全局变量,只要是全局变量,就不用去捕获!
局部变量需要捕获,应该是因为作用域的问题~



上图访问a,b相当于在另外一个函数中访问test函数中的a,b。全局变量的话,只要定义好,在哪个函数中都能访问,所以不需要捕获~所以局部变量需要捕获的原因很简单,因为是跨函数来访问局部变量,所以需要捕获~


说明self对象有被捕获~

函数参数是一种局部变量



self,_cmd是函数默认传的参数

test方法最终转成了下面的




属性默认生成的set方法和get方法---本质转成的还是c语言的函数


记住,我们oc里面的方法,最前面的两个参数都是self(方法调用者)和_cmd(方法名)两个参数,后面才是其他参数
_name 可以看作是self->_name!





block里面依然有捕获self对象



所以block里面访问_name就是访问self里面的_name 相当于self->_name
_name来自于当前的person对象
所以上图是直接对整个self进行捕获,捕获到self后,再去访问self对象里面的_name, 而不是单独对_name进行捕获!


同一个test方法,可能是person1调用,也可能是person2调用,所以test方法默认传进来的self参数可能是不同的,函数参数是局部变量,所以传进来的self是局部变量


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。