美文网首页
iOS 底层学习11 -- Block捕获变量

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

作者: 恋空K | 来源:发表于2020-08-07 11:15 被阅读0次

    如果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是局部变量


    相关文章

      网友评论

          本文标题:iOS 底层学习11 -- Block捕获变量

          本文链接:https://www.haomeiwen.com/subject/bqanrktx.html