如果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是局部变量
网友评论